Метод stream класса List
Метод stream класса List возвращает последовательный поток
(Stream) элементов данного списка. Поток позволяет обрабатывать
элементы коллекции в функциональном стиле: фильтровать, преобразовывать,
сортировать и собирать результат. Метод не принимает параметров и не
изменяет исходный список - он лишь создаёт поток, который ссылается
на элементы списка.
Полученный поток можно использовать для дальнейших операций:
filter, map, sorted, collect, forEach
и других. Важно помнить, что поток можно потребить только один раз:
повторное использование вызовет исключение.
Синтаксис
list.stream()
Пример
Давайте получим поток из списка и выведем каждый его элемент на экран:
import java.util.List;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
list.stream().forEach(System.out::println);
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
Пример
Давайте отфильтруем список чисел, оставив только чётные, и соберём результат в новый список:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
List<Integer> res = list.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(res);
}
}
Результат выполнения кода:
[2, 4]
Пример
Давайте преобразуем каждый элемент списка строк в верхний регистр:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
List<String> res = list.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(res);
}
}
Результат выполнения кода:
[A, B, C, D, E]
Пример
Давайте отсортируем список строк в обратном порядке с помощью потока:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
List<String> res = list.stream()
.sorted((x, y) -> y.compareTo(x))
.collect(Collectors.toList());
System.out.println(res);
}
}
Результат выполнения кода:
[e, d, c, b, a]
Пример
Давайте подсчитаем сумму всех элементов списка чисел с помощью потока:
import java.util.List;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
int res = list.stream()
.reduce(0, (sum, n) -> sum + n);
System.out.println(res);
}
}
Результат выполнения кода:
15