РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
467 of 1163 menu

Метод filter

Метод filter класса Stream фильтрует элементы потока по заданному условию. Метод принимает один параметр - функцию-предикат типа Predicate, которая принимает элемент потока и возвращает boolean: true, если элемент должен остаться в потоке, и false, если элемент нужно отбросить. Метод возвращает новый поток, состоящий только из тех элементов исходного потока, для которых предикат вернул true. Исходный поток при этом не изменяется. Метод является промежуточной операцией и выполняется лениво - только при вызове терминальной операции.

Синтаксис

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

Пример

Давайте отфильтруем из потока чисел только чётные числа:

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> res = List.of(1, 2, 3, 4, 5) .stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

[2, 4]

Пример

Давайте отфильтруем из потока строк только те строки, которые начинаются с символа "a":

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> res = List.of("abcde", "12345", "apple", "banana") .stream() .filter(s -> s.startsWith("a")) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

["abcde", "apple"]

Пример

Давайте применим несколько фильтров подряд, чтобы отобрать числа, которые больше 1 и меньше 5:

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> res = List.of(1, 2, 3, 4, 5) .stream() .filter(n -> n > 1) .filter(n -> n < 5) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

[2, 3, 4]

Пример

Давайте с помощью метода filter отбросим все пустые строки и выведем результат:

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> res = List.of("abcde", "", "12345", "", "apple") .stream() .filter(s -> !s.isEmpty()) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

["abcde", "12345", "apple"]

Пример

Давайте с помощью метода filter найдём сумму чисел, которые делятся на 3 без остатка:

import java.util.List; public class Main { public static void main(String[] args) { int res = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9) .stream() .filter(n -> n % 3 == 0) .mapToInt(n -> n) .sum(); System.out.println(res); } }

Результат выполнения кода:

18

Смотрите также

  • класс Stream,
    который представляет поток элементов
  • метод map,
    который преобразует элементы потока
  • метод distinct,
    который удаляет дубликаты из потока
  • метод collect,
    который собирает элементы потока в коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить