У меня есть список MyObjects, которые мне нужно разделить на три группы:OO шаблон для разделения коллекции на группы
- Known хорошо (держать)
- Известный плохой (отклонить)
- Непризнанный (поднять предупреждение)
MyObject содержит различные свойства, которые должны быть изучены, чтобы определить, какой из 3-х групп поместить объект.
Моя первоначальная реализация (Java) просто берет Список в его конструкторе и выполняет сортировку там. Псевдокод:
class MyObjectFilterer {
public MyObjectFilterer(List<MyObject> list) {
// triage items here
}
public List<MyObject> getGood() {
// return sub-list of good items
}
public List<MyObject> getBad() {
// return sub-list of bad items
}
public List<MyObject> getUnrecognized() {
// return sub-list of unrecognized items
}
}
Любые проблемы с этой реализацией? Есть ли лучший выбор OO?
Я знаю, что вы немного недовольны чрезмерным или неправильным использованием функциональных парадигм Гуавы, но, как часть команды Guava, вы не собираетесь предлагать использование 'Predicate' и 'Iterables.filter() '? –
Абсолютно нет. Для начала OP хочет разбить список на три категории. Даже используя 'Iterables.filter' - OP будет использовать' Predicate', а не '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' , а не один. Мало того, что функциональные идиомы делают это менее читаемым, это сделает его менее эффективным. –
Я был занят редактированием своего сообщения, чтобы использовать Predicates, прежде чем увидел ваш ответ. Я вижу вашу точку зрения, поскольку она относится к вопросу, как прямо спрашивается. Наверное, я думал о том, что было «зависеть» от вопроса. Действительно ли цель состоит в том, чтобы иметь три физических коллекции или была цель иметь средства для классификации каждого элемента одной коллекции по мере необходимости? Если последнее, то было бы неуместным предлагать использование предикатов в качестве распределенных классификаторов, если вы не хотите добавлять логику к классифицируемым объектам? –