Stream.filter()
Оставляет в потоке только элементы, подходящие под условие.
Доступно с: Java 8
Синтаксис
Stream<T> filter(Predicate<? super T> predicate)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| predicate | Predicate<? super T> | Условие: элемент остаётся, если оно истинно. |
Возвращаемое значение
Stream<T>Поток только с подходящими элементами.
Примеры
Чётные числа:
void main() {
List<Integer> even = List.of(1, 2, 3, 4, 5, 6).stream()
.filter(n -> n % 2 == 0)
.toList();
IO.println(even);
}Результат:
[2, 4, 6]Несколько условий подряд:
record Product(String name, double price, boolean inStock) {}
void main() {
var products = List.of(
new Product("mouse", 25, true),
new Product("monitor", 199, true),
new Product("cable", 5, false));
products.stream()
.filter(Product::inStock)
.filter(p -> p.price() < 100)
.forEach(p -> IO.println(p.name()));
}Результат:
mouseПримечания
Условие говорит, что оставить (у removeIf() — что удалить). Исходная коллекция не меняется. Если нужно остановиться на первом неподходящем элементе упорядоченного потока, используйте takeWhile().
См. также
- Stream.map() — Преобразует каждый элемент потока.
- Collection.removeIf() — Удаляет из коллекции все элементы, подходящие под условие.
- Predicate — Условие: функция, которая принимает значение и возвращает `boolean`.
- Stream.takeWhile() — Берёт элементы, пока выполняется условие, и останавливается на первом неподходящем.
Вопросы и ответы по теме
В учебнике
- Операции над потоками — Основные операции Stream API — filter, map, sorted, distinct, limit, skip, count, reduce, anyMatch, findFirst и числовые потоки.