Допустим, у нас есть список задач, и нужно получить только те, которые ещё не выполнены.
Создадим простой record:
record Task(String title, boolean done) {}Теперь подготовим список:
List<Task> tasks = List.of(
new Task("Read docs", false),
new Task("Write tests", true),
new Task("Fix bug", false)
);
Можно пройтись циклом и вручную собрать новый список:
List<Task> active = new ArrayList<>();
for (Task task : tasks) {
if (!task.done()) {
active.add(task);
}
}
Но для такой задачи хорошо подходит Stream API:
List<Task> active = tasks.stream()
.filter(task -> !task.done())
.toList();
filter оставляет только элементы, которые проходят условие.
В нашем случае это задачи, у которых done() возвращает false.
Выведем результат:
active.forEach(System.out::println);
Получим только активные задачи:
Task[title=Read docs, done=false]
Task[title=Fix bug, done=false]
Такой подход удобно использовать не только для задач, но и для заказов, пользователей, товаров, уведомлений или любых списков объектов.
Например, можно выбрать только оплаченные заказы:
List<Order> paid = orders.stream()
.filter(Order::isPaid)
.toList();
filter это базовый, но очень полезный инструмент Stream API для отбора данных по условию.
👉 Java Ready | #практика