Страницы

Поиск по вопросам

среда, 4 марта 2020 г.

Как выполнить какое-то действие, если в коллекции найдется элемент с соответствующим полем?

#java #коллекции #java_stream #java_8


Как выполнить какое-то действие, если в коллекции найдется элемент с соответствующим
полем?

List items = new ArrayList<>();
...
add values
...
String customer;

for (item:items){
    if (Objects.equals(item.getId(), "123123123")){
        customer="admin";
        break;
    }
}


Как это будет выглядеть с использование java 8, stream api?
    


Ответы

Ответ 1



Воспользуйтесь методом Stream::anyMatch: boolean contains = items .stream() .anyMatch(item -> Objects.equals(item.getId(), "123123123")); String customer = contains ? "admin" : null; Ideone

Ответ 2



Вот еще вариант с Optional для разнообразия: String customer = items.parallelStream().map(Item::getId) .filter("123123123"::equals).map(s -> "admin") .findAny().orElse(null);

Ответ 3



Если принять во внимание то, что Id однозначно определяет соответствующий ему Item и, кроме того, в данном случае имплементит Comparable, то для оптимизации можно воспользоваться структурой данных TreeSet и хранить идентификаторы в ней. List items = new ArrayList<>(); TreeSet setOfIds = items.stream().map(item -> item.getId()). collect(Collectors.toCollection(TreeSet::new)); String customer = setOfIds.contains("123123123") ? "admin" : null; Такой подходит позволяет ускорить процесс поиска в коллекции до O(logN).

Комментариев нет:

Отправить комментарий