Фильтрация потока Java по заданному параметру - PullRequest
0 голосов
/ 11 марта 2019

У меня есть List<MyObject>:

My Object:
    String name;
    String team;

РЕДАКТИРОВАТЬ: я хочу создать функцию, которая будет фильтровать этот список, используя два параметра:

public List<MyObject> filterMyObjectList (String name, String state, List<MyObject> objectsList)

Мне нужно создать два фильтра:

Первый отфильтрует MyObject по имени и добавит в возвращаемый список только те объекты, где MyObject.getName().equals(name).

Второй отфильтрует MyObject командой, используя другую имеющуюся у меня функцию (getState(MyObject.getTeam())), и добавит в список только те объекты, где getState(MyObject.getTeam()).equals(state).

Есть ли способ написать предикат, подобный этому? Используя переменную для сравнения? Есть ли другой способ фильтрации с использованием сравнения?

Спасибо!

1 Ответ

1 голос
/ 12 марта 2019

Для этого вы можете просто применить фильтр:

public List<MyObject> filterMyObjectList (String name, String state, List<MyObject> objectsList) {
   return objectsList.stream()
                     .filter(obj -> obj.getName().equals(name) && getState(obj.getTeam()).equals(state))
                     .collect(Collectors.toList());
}

Поскольку вы проверяете два состояния одного и того же объекта, вы можете объединить их с && в Predicate

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