Java 8 Stream filter
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 8. Надеемся, что данная статья Вам будет полезна. Приятного прочтения!
В этой статье мы рассмотрим фильтрацию данных с помощью Stream-ов в Java.
1. Введение
Stream API - новый способ взаимодействия с данными, представляя их в виде конечного потока данных.
Один из методов Stream-ов - filter принимает лямбда-выражение известное как предикат, необходимое для фильтрации данных по какому-то условию.
С ними мы сегодня и научимся работать
2. Stream filter + forEach
До выхода Java 8 фильтрация данных выглядела так
1 2 3 4 5 6 7 8 9 |
public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); for (Integer i : numbers) { if (i % 2 == 0) { System.out.println(i); } } } |
Вывод
1 2 3 4 5 |
2 4 6 8 10 |
Теперь же мы можем использовать API Stream-ов : filter, forEach
1 2 3 4 5 6 7 |
public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); numbers.stream() .filter(i -> i % 2 == 0) .forEach(System.out::println); } |
Вывод
1 2 3 4 5 |
2 4 6 8 10 |
3. Stream filter + count
Если бы мы хотели подсчитать колличество строк, длинна которых > 4 до выхода Java 8
1 2 3 4 5 6 7 8 9 10 11 |
public static void main(String[] args) { List<String> names = Arrays.asList("John", "Jan", "Tirion", "Marry", "Nikolas"); int counter = 0; for (String name : names) { if (name.length() > 4) { counter++; } } System.out.println(counter); //output 3 } |
Но с помощью метода count в Stream-ах все гораздо проще
1 2 3 4 5 6 7 8 |
public static void main(String[] args) { List<String> names = Arrays.asList("John", "Jan", "Tirion", "Marry", "Nikolas"); long count = names.stream() .filter(i -> i.length() > 4) .count(); System.out.println(count); //output 3 } |
4. Stream + multiple filters
Все становится еще круче если появляются несколько условий.
К примеру нужно вывести все не нулевые и не пустые имена, которые содержат букву 'a' .
До Java 8
1 2 3 4 5 6 7 8 9 |
public static void main(String[] args) { List<String> names = Arrays.asList("John", "Daenerys", "Tyrion", "", null, "Arya"); for (String name : names) { if (name != null && !name.isEmpty() && name.contains("a")) { System.out.println(name); } } } |
Сейчас
1 2 3 4 5 6 7 8 |
public static void main(String[] args) { List<String> names = Arrays.asList("John", "Daenerys", "Tyrion", "", null, "Arya"); names.stream() .filter(Objects::nonNull) .filter(name -> !name.isEmpty() && name.contains("a")) .forEach(System.out::println); } |
Таких цепочек из filter может быть сколько угодно.
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Детальную информацию Вы можете найти у нас на сайте.