Есть код (Java 7):
Set<Session> set = new HashSet<>();
for (Session session : this.sessions.values()) { // sessions -> HashMap<String, Session>
if (session.isSavingRequired()) {
session.setSavingRequired(false);
set.add(session);
}
}
Как переделать код выше в вариант java 8 ? Я пробовал так:
Set<Session> set = this.sessions.values()
.stream()
.filter(Session::isSavingRequired)
.collect(Collectors.toSet());
Проблема в том, что в коде выше я пропускаю строку session.setSavingRequired(false); что не есть хорошо. Как сделать правильно?
Или так:
Set<Session> set = this.sessions.values()
.stream()
.filter(Session::isSavingRequired)
.peek(s -> s.setSavingRequired(false))
.collect(Collectors.toSet());
Не стоит применять потоки данных всегда и везде. Если алгоритм требует состояния, значит функциональный подход не для него.
Можно сделать следующим образом:
Set<Session> set = this.sessions.values()
.stream()
.filter(Session::isSavingRequired)
.map(session -> {
session.setSavingRequired(false);
return session;
})
.collect(Collectors.toSet());
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники