Java 8 Stream API | Создание потоков | Продвинутый
Java 8 Stream API, создание потоков и их основные особенности
Перед тем как рассмотреть способы создания потоков, давайте немного поговорим что же такое эти потоки.
Говоря поток, я имею ввиду Stream, т.е. поток данных (не поток выплнения Thread и не поток ввода вывода)
Говоря просто, поток похож на коллекцию тем что позволяет извлекать и обрабатывать данные, но потоку, в отличии от коллекции неважно как хранить данные.
Для потока самое важное — это те операции которые можно выполнить с данными. Фактически поток представляет собой конвейер операций
Давайте перечислим основные особенности потоков:
- Поток не хранит элементы, элементы храняться в источнике данных, например в коллекции
- В результате работы с данными потока, не меняются сами данные и их источник
- Поток неизменяемый, после обработки данных создаётся новый поток
- В потоке большинство оперций ленивые, т.е. выполняются по требованию
- Потоки содержат такой набор операций, которые легко можно распараллелить
Операции выполняемые с потоком, как мы выяснили, являются самым важным в потоках.
Операции деляться на:
промежуточные — могут быть отложены
завершающие — инициирует выполнение всех промежуточных операций
Об операциях мы поговорим в следующих статьях, а пока давайте поговорим о типах потоков
Типы потоков
Потоки представлены классом Stream, предназначен для хранения любых объектов, но при создании потока выплняется параметризация.
Так же есть специализированные типы потоков: IntStream, LongStream, DoubleStream.
1 2 3 4 5 6 7 8 9 10 11 12 |
Stream stream = Stream.of("java", "trainings", "online", "Kiev", "Stream", "API"); // без параметризации - Stream<object width="300" height="150"> Stream<integer> ints = Stream.of(2,0,1,7); ints.forEach(l -> System.out.println(l)); // вывод элементов потока на экран <h3>Создание потоков из коллекций или массив</h3> <pre class="lang:java decode:true "> Collection c = new TreeSet(Arrays.asList(1,2,3,4)); // создаём множество из списка и ссылаемся ссылкой Collection c.stream().forEach(System.out::print); // создаём поток из коллекции и используем для вывода ссылку на метод long[] vector = {2, 0, 1, 6}; LongStream longs = LongStream.of(vector); // специализированный поток, создаём из источника массива longs.forEach(System.out::println); |
1 |
Stream stream = Stream.empty(); |
Создание потоков из строк
Самый ‘стандартный’ способ создания потока из строки — это создание потока сиволов в виде элементов int.
1 |
IntStream stream = "Java 8 programming training's in Kiev".chars(); |
1 2 |
Stream<string> stream = Stream.of("online,Jedi,Master".split(",")); </string> |
1 2 3 |
String res = Stream.of("online,Jedi,Master".split(",")) .map(s -> s + "_") .collect(Collectors.joining(",")); |