Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Stream.filter()

Оставляет в потоке только элементы, подходящие под условие.

Доступно с: Java 8

Синтаксис

Stream<T> filter(Predicate<? super T> predicate)

Параметры

ПараметрТипОписание
predicatePredicate<? 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 и числовые потоки.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.