#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).
Комментариев нет:
Отправить комментарий