Представим, что у нас есть список логов, и нужно быстро достать только сообщения с уровнем ERROR.
Создадим простую модель:
record LogEntry(String level, String message) {}
Подготовим данные:
List<LogEntry> logs = List.of(
new LogEntry("INFO", "User opened page"),
new LogEntry("ERROR", "Payment failed"),
new LogEntry("WARN", "Slow response"),
new LogEntry("ERROR", "Database timeout")
);Можно пройтись обычным циклом:
List<String> result = new ArrayList<>();
for (LogEntry log : logs) {
if (log.level().equals("ERROR")) {
result.add(log.message());
}
}
Но через Stream API это читается компактнее:
List<String> result = logs.stream()
.filter(log -> log.level().equals("ERROR"))
.map(LogEntry::message)
.toList();
filter оставляет только ошибки.
map превращает объект лога в текст сообщения.
В результате получим:
[Payment failed, Database timeout]
Такой подход удобно использовать для логов, событий, уведомлений, заказов, пользователей и любых списков, где нужно сначала отфильтровать данные, а потом достать нужное поле.
👉 Java Ready | #практика