Java - добавление критерия, который должен действовать как фильтр для списков задач - PullRequest
0 голосов
/ 23 июня 2019

Итак, я хочу реализовать простую функциональность списков дел с потоками.Эти списки дел, очевидно, получили задачи.Каждое задание имеет статус (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(...))); критерии, очевидно, должны действовать как своего рода предикат.

Хотя я абсолютно не знаю, как это сделать.Буду признателен за помощь, большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...