10 способов создать поток на Java
Stream API, представленный в Java 8, используется для обработки коллекций объектов. Поток - это последовательность объектов, которая поддерживает множество различных методов, которые можно объединить в конвейер для получения желаемого результата.
Особенности потока Java:
- Поток не является структурой данных, он принимает входные данные из коллекций, массивов или каналов ввода-вывода.
- Streams не изменяет исходную структуру данных, они только предоставляют результат в виде конвейерных методов.
- Каждая промежуточная операция выполняется лениво и в результате возвращает поток, поэтому различные промежуточные операции могут быть распределены по конвейеру. Терминальная операция отмечает конец потока и возвращает результат.
Другой способ создания потоков:
- Использование коллекции
Подход:
- Получить коллекцию
- Создайте последовательный поток из коллекции с помощью метода Collection.stream ()
- Распечатать поток
Ниже представлена реализация описанного выше подхода:
Программа:
// Java program to create Stream from Collectionsimportjava.util.*;importjava.util.stream.Stream;classGFG {// Function convert a List into Streamprivatestatic<T>voidgetStream(List<T> list){// Create stream object with the ListStream<T> stream = list.stream();// Iterate list first to last elementIterator<T> it = stream.iterator();// Iterate stream objectwhile(it.hasNext()) {System.out.print(it.next() +" ");}}publicstaticvoidmain(String[] args){// Create ArrayList of StringList<String> list =newArrayList<>();// Add element in listlist.add("Geeks");list.add("for");list.add("Geeks");// Get the Stream from the ListgetStream(list);}}Выход:Вундеркинды для гиков
- Создать поток из указанных значений
Метод Stream.of (T… t) может использоваться для создания потока с указанными значениями t, где t - элементы. Этот метод возвращает последовательный Stream, содержащий элементы t.
Ниже представлена реализация описанного выше подхода:
Программа:
// Java program to create Stream from valuesimportjava.util.*;importjava.util.stream.Stream;classGFG {// Function convert a List into StreamprivatestaticvoidgetStream(){// Create a stream from specified valuesStream<Integer> stream= Stream.of(1,2,3,4,5,6,7,8,9);// Displaying the sequential ordered streamstream.forEach(p -> System.out.print(p +" "));}publicstaticvoidmain(String[] args){// Get the Stream from the valuesgetStream();}}Выход:1 2 3 4 5 6 7 8 9
- Создать поток из массива:
Stream.of () и Arrays.stream () - два обычно используемых метода для создания последовательного потока из указанного массива. Оба эти метода возвращают Stream при вызове с непримитивным типом T.
Целочисленный массив- Создать поток с помощью Arrays.stream ()
Программа:
// Java program to create Stream from Collectionsimportjava.util.*;importjava.util.stream.Stream;classGFG {// Function convert a List into Streamprivatestatic<T>voidgetStream(T[] arr){// Create stream from an array// using Arrays.stream()Stream<T> streamOfArray= Arrays.stream(arr);// Iterate list first to last elementIterator<T> it= streamOfArray.iterator();// Iterate stream objectwhile(it.hasNext()) {System.out.print(it.next() +" ");}}publicstaticvoidmain(String[] args){// Get the arrayString[] arr=newString[] {"a","b","c"};// Get the Stream from the ArraygetStream(arr);}}Выход:abc
- Создать поток с помощью Stream.of ()
Не мешающее действие, которое должно выполняться над элементами, поскольку они потребляются из потока, и также возвращает новый поток.Программа:
// Java program to create Stream from Collectionsimportjava.util.*;importjava.util.stream.Stream;classGFG {// Function convert a List into Streamprivatestatic<T>voidgetStream(T[] arr){// Create stream from an array// using Stream.of()Stream<T> streamOfArray = Stream.of(arr);// Iterate list first to last elementIterator<T> it = streamOfArray.iterator();// Iterate stream objectwhile(it.hasNext()) {System.out.print(it.next() +" ");}}publicstaticvoidmain(String[] args){// Get the arrayString[] arr=newString[] {"a","b","c"};// Get the Stream from the ArraygetStream(arr);}}Выход:abc
- Создать поток с помощью Arrays.stream ()
- Создайте пустой поток с помощью Stream.empty ()
Метод empty () используется при создании, чтобы избежать возврата null для потоков без элемента.
Программа:
// Java program to create empty Streamimportjava.util.*;importjava.util.stream.Stream;classGFG {// Function convert a List into StreamprivatestaticvoidgetStream(){// Create stream from an array using Stream.empty()Stream<String> streamOfArray= Stream.empty();// Iterate list first to last elementIterator<String> it= streamOfArray.iterator();// Iterate stream objectwhile(it.hasNext()) {System.out.print(it.next() +" ");}}publicstaticvoidmain(String[] args){// Get the empty StreamgetStream();}}Выход: - Создайте поток с помощью Stream.builder ()
Метод builder () используется, когда желаемый тип должен быть дополнительно указан в правой части оператора, иначе метод build () создаст экземпляр Stream.
Программа:
// Java program to create Stream from Collectionsimportjava.util.*;importjava.util.stream.Stream;classGFG {// Function convert a List into Streamprivatestatic<T>voidgetStream(){// Create stream using Stream builder()Stream.Builder<String> builder= Stream.builder();// Adding elements in the stream of StringsStream<String> stream = builder.add("a").add("b").add("c").build();// Iterate list first to last elementIterator<String> it = stream.iterator();// Iterate stream objectwhile(it.hasNext()) {System.out.print(it.next() +" ");}}publicstaticvoidmain(String[] args){// Get the Stream using BuildergetStream();}}Выход:abc
- Создайте бесконечный поток с помощью Stream.iterate ()
Метод iterate () возвращает бесконечный последовательный упорядоченный поток, созданный путем итеративного применения функции f к начальному элементу seed. В приведенном ниже примере первый элемент результирующего потока является первым параметром метода итерации. Для создания каждого следующего элемента функция применяется к предыдущему элементу. В приведенном ниже примере вторым элементом будет 4.
Программа:
// Java program to create infinite Stream// using Stream.iterate() methodimportjava.util.*;importjava.util.stream.Stream;classGFG {// Function convert a List into Streamprivatestatic<T>voidgetStream(intseedValue,intlimitTerms){// Create infinite stream// using Stream.iterate() methodStream.iterate(seedValue,(Integer n) -> n * n).limit(limitTerms).forEach(System.out::println);}publicstaticvoidmain(String[] args){// Get the seed valueintseedValue =2;// Get the limit for number of termsintlimitTerms =5;// Get the Stream from the functiongetStream(seedValue, limitTerms);}}Выход:2 4 16 256 65536
- Создайте бесконечный поток с помощью метода Stream.generate ()
Метод generate () принимает поставщика для генерации элементов, и результирующий поток бесконечен. Чтобы ограничить его, укажите желаемый размер, иначе метод generate () будет работать, пока не достигнет предела памяти.
Программа:
// Java program to create infinite Stream// using Stream.generate() methodimportjava.util.*;importjava.util.stream.*;classGFG {// Function convert a List into Streamprivatestatic<T>voidgetStream(intlimitTerms){// Create infinite stream// using Stream.generate() methodStream.generate(Math::random).limit(limitTerms).forEach(System.out::println);}publicstaticvoidmain(String[] args){// Get the limit for number of termsintlimitTerms =5;// Get the Stream from the functiongetStream(limitTerms);}}Выход:0,2293502475696314 0,5650334795948209 0,3418138293253522 0,36831074763500116 0,4864408670097241
- Создать поток из шаблона с помощью предиката
В java 8 метод Predicate asPredicate () в Pattern создает функцию с логическим значением предиката, которая используется для сопоставления с образцом.
Программа:
// Java program to create Stream from Collectionsimportjava.util.*;importjava.util.stream.*;importjava.util.regex.Pattern;classGFG {// Function convert a List into StreamprivatestaticvoidgetStream(List<String> list, Pattern p){list.stream().filter(p.asPredicate()).forEach(System.out::println);}publicstaticvoidmain(String[] args){// Create ArrayList of String// that is backed by the specified arrayList<String> list= Arrays.asList("Geeks","For","Geek","GeeksForGeeks","A Computer Portal");// Get the patternPattern p = Pattern.compile("^G");// Get the Stream from the List matching PatterngetStream(list, p);}}Выход:Компьютерщики Компьютерщик GeeksForGeeks
- Создать поток из Итератора
Итераторы в Java используются в Collection Framework для получения элементов один за другим. Spliterator - это ключ к созданию последовательного потока. Следовательно, в этом методе также используется Spliterator. Но в этом методе источником Spliterator является Iterable, созданный из Iterator. Итак, сначала Iterable создается из Iterator. Затем Spliterator передается методу stream () напрямую как Iterable.spliterator ().
Программа:
// Java program to create Stream from Collectionsimportjava.util.*;importjava.util.stream.*;classGFG {// Function convert a List into Streamprivatestatic<T>voidgetStream(Iterator<T> itr){// Convert the iterator into a SpliteratorSpliterator<T> spitr= Spliterators.spliteratorUnknownSize(itr,Spliterator.NONNULL);// Convert spliterator into a sequential streamStream<T> stream= StreamSupport.stream(spitr,false);// Iterate list first to last elementIterator<T> it = stream.iterator();// Iterate stream objectwhile(it.hasNext()) {System.out.print(it.next() +" ");}}publicstaticvoidmain(String[] args){// Get the IteratorIterator<String> iterator = Arrays.asList("a","b","c").iterator();// Get the Stream from the IteratorgetStream(iterator);}}Выход:abc
- Создать поток из Iterable
Итерируемый интерфейс разработан с учетом и не предоставляет никаких методов stream () сам по себе. Просто его можно передать в метод StreamSupport.stream () и получить Stream из заданного объекта Iterable. Легче превратить Iterable в Stream. Iterable имеет метод spliterator () по умолчанию, который можно использовать для получения экземпляра Spliterator, который, в свою очередь, можно преобразовать в Stream.
Примечание . Iterable не является экземпляром Collection, этот метод внутренне вызывает StreamSupport.stream () для получения последовательного Stream из Spliterator, иначе он просто вызывает метод Collection.stream ().
Программа:
// Java program to create Stream from Collectionsimportjava.util.*;importjava.util.stream.*;classGFG {// Function convert a List into Streamprivatestatic<T>voidgetStream(Iterable<T> iterable){// Convert the iterator into a StreamStream<T> stream= StreamSupport.stream(iterable.spliterator(),false);// Iterate list first to last elementIterator<T> it = stream.iterator();// Iterate stream objectwhile(it.hasNext()) {System.out.print(it.next() +" ");}}publicstaticvoidmain(String[] args){// Get the IterableIterable<String> iterable= Arrays.asList("a","b","c");// Get the Stream from the IterablegetStream(iterable);}}Выход:abc
Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .