viperz
@viperz
inspired by Java

Выйти из Collection.forEach() по условию?

Добрый день.

Я понимаю, что после появления Java 8 прошло уже много времени, но тем не менее сценарий использования Collection.forEach() везде предлагается один и тот же - мы проходим по всем элементам коллекции и с каждым элементов что-то делаем.

А если мне нужно реализовать другой достаточно типичный сценарий. Цель - идти ровно до тех пор, пока я чего-то не обнаружу в коллекции:

for (Item item : items) {
            if (item  ... pass some condition ...) {
                found = true;
                break;
            }
}


Есть ли возможность это сделать в стиле Java 8?

Ещё часто в таких циклах мне хотелось бы сделать выход из метода:
for (Item item : items) {
            if (item  ... pass some condition ...) {
                return item.getSomeValue();
            }
}


Возможно ли такое в стиле Java 8?
  • Вопрос задан
  • 1711 просмотров
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Если вам такое нужно, то вы неправильно понимаете природу потокового API. forEach() - это не цикл в обычном его императивном понимании. Правильным решением является предварительная фильтрация потока, чтобы в forEach() поступили только нужные значения. Или одно нужное. Если уж очень надо, то из потока можно получить итератор и обойти его в классическом while(iterator.hasNext()).
Ответ написан
Комментировать
OLDRihard
@OLDRihard
Java Developer
Если откинуть всякий сахар что останется? А останется выполнение определенного метода для каждого элемента. И ни 1ое ни второе тут не прокатит.
Но койчаво я могу посоветовать. Вызывать в начале Stream
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы