Stream-API не предоставляет механизм итерации, как Итератор , для этого вы должны использовать Iterator<User>
.Однако сначала лучше отфильтровать правильные значения.
List<User> filteredUsers = users.stream()
.filter(user -> user.getName().equals("Tom"))
.collect(Collectors.toList());
Теперь получите Iterator<User>
и выполните итерацию.
Iterator<User> iterator = filteredUsers.iterator();
while (iterator.hasNext()) {
User user = iterator.next()
// Take a control over the further iteration here...
}
Редактировать:
Согласно вашему редактированию, вы хотите выяснить, есть ли у какого-либо пользователя имя Tom
, а затем выполнить итерацию над items
.Используйте метод anyMatch(Predicate<? super T> predicate)
, который возвращает true
, если какой-либо элемент потока соответствует предикату.Он принимает тот же предикат, что и filter(Predicate<? super T> predicate)
.
if (users.stream().anyMatch(user -> user.getName().equals("Tom"))) {
for (Item item : item) {
// ...
}
}
Edit2: Как правильно заметил @Bohemian, рассмотрите возможность проверки наличия элемента в каждой итерации, так как может бытьэлемент с добавленным "Tom"
и условие больше не сохраняется false
.