Класс Stream
Класс Stream представляет собой последовательность
элементов, над которой можно выполнять различные
операции: фильтрацию, преобразование, сортировку,
агрегацию и другие. Потоки не хранят данные,
а лишь обрабатывают их из источника (коллекции,
массива, генератора). Поток можно создать
из коллекции через метод stream, из массива
через Arrays.stream, а также через методы
Stream.of, Stream.iterate, Stream.generate.
Потоки бывают промежуточными (возвращают новый
поток) и терминальными (завершают обработку
и возвращают результат). Поток можно использовать
только один раз - после терминальной операции
он становится недоступным.
Синтаксис
Stream<T> stream = collection.stream();
Stream<T> stream = Stream.of(values);
stream.intermediateOperation().terminalOperation();
Пример
Давайте создадим поток из списка и отфильтруем только чётные числа:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
List<Integer> res = numbers.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(s -> s.toUpperCase())
.collect(Collectors.toList());
System.out.println(res);
}
}
Результат выполнения кода:
[A, B, C, D, E]
Пример
Давайте создадим поток напрямую через метод
Stream.of и посчитаем количество элементов:
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
long res = Stream.of(1, 2, 3, 4, 5)
.filter(n -> n > 2)
.count();
System.out.println(res);
}
}
Результат выполнения кода:
3
Пример
Давайте отсортируем строки и соберём их
в одну строку через метод collect:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("abcde", "12345", "bcd");
String res = list.stream()
.sorted()
.collect(Collectors.joining(", "));
System.out.println(res);
}
}
Результат выполнения кода:
"12345, abcde, bcd"