Итак, я хочу реализовать простую функциональность списков дел с потоками.Эти списки дел, очевидно, получили задачи.Каждое задание имеет статус (to-do, done) и приоритет (low, high).Оба они имеют тип enum.У меня также есть описание и теги для каждой задачи.
Я должен быть в состоянии отфильтровать список следующим образом:
list.filter(Criteria.priority(Priority.HIGH));
list.filter(Criteria.tags(new String[] { "something" }).or(Criteria.priority(Priority.HIGH));
Вот как выглядит мой критерий интерфейса:
public interface Criteria {
static Criteria status(Status status) {
return new StatusCriteria(status);
}
static Criteria priority(Priority priority) {
return new PriorityCriteria(priority);
}
static Criteria tags(String[] tags) {
return new TagsCriteria(tags);
}
Criteria and(Criteria other);
Criteria or(Criteria other);
Criteria not();
}
Критерии статуса, приоритета и теговразличные типы критериев, которые реализуют интерфейс Criteria.Это пример того, как выглядит реализация моих критериев приоритета:
public class PriorityCriteria implements Criteria {
private Priority priority;
public PriorityCriteria(Priority priority) {
this.priority = priority;
}
@Override
public Criteria and(Criteria other) {
return null;
}
@Override
public Criteria or(Criteria other) {
return null;
}
@Override
public Criteria not() {
return null;
}
}
Итак, мой вопрос, поскольку список дел реализует этот интерфейс:
public interface TodoList {
boolean isCompleted();
List<Task> getTasks();
TodoList filter(Criteria criteria);
}
КакЯ должен добавить правильную функциональность и / или / нет, когда я не могу получить доступ к задачам списка из классов, которые реализуют интерфейс Criteria?
Поэтому, чтобы отфильтровать это: Criteria.tags(..).or(Criteria.status(...).and(Criteria.priority(...)));
критерии, очевидно, должны действовать как своего рода предикат.
Хотя я абсолютно не знаю, как это сделать.Буду признателен за помощь, большое спасибо