logo

Потік Java 8

Java надає новий додатковий пакет у Java 8 під назвою java.util.stream. Цей пакет складається з класів, інтерфейсів і enum, що дозволяє виконувати операції над елементами у функціональному стилі. Ви можете використовувати потік, імпортувавши пакет java.util.stream.


Потік надає такі функції:

  • Потік не зберігає елементи. Він просто передає елементи з джерела, такого як структура даних, масив або канал вводу/виводу, через конвеєр обчислювальних операцій.
  • Потік має функціональний характер. Операції, виконані над потоком, не змінюють його джерело. Наприклад, фільтрація Потоку, отриманого з колекції, створює новий Потік без відфільтрованих елементів, а не видаляє елементи з вихідної колекції.
  • Потік лінивий і оцінює код лише за потреби.
  • Елементи потоку відвідуються лише один раз протягом життя потоку. Подібно до ітератора, новий потік повинен бути згенерований для повторного перегляду тих самих елементів джерела.

Ви можете використовувати потік для фільтрації, збору, друку та перетворення однієї структури даних в іншу тощо. У наступних прикладах ми застосували різні операції за допомогою потоку.

Методи інтерфейсу потоку Java

методи опис
boolean allMatch(предикатний предикат) Він повертає всі елементи цього потоку, які відповідають наданому предикату. Якщо потік порожній, повертається true і предикат не оцінюється.
boolean anyMatch(Предикатний предикат) Він повертає будь-який елемент цього потоку, який відповідає наданому предикату. Якщо потік порожній, повертається false і предикат не обчислюється.
статичний Stream.Builder builder() Він повертає конструктор для потоку.
R collect(колектор колектор) Він виконує змінну операцію зменшення над елементами цього потоку за допомогою Collector. Collector інкапсулює функції, які використовуються як аргументи для збирання (Supplier, BiConsumer, BiConsumer), дозволяючи повторно використовувати стратегії збору та композицію операцій збирання, наприклад багаторівневе групування або розділення.
R collect (Постачальник-постачальник, акумулятор BiConsumer, об’єднувач BiConsumer) Він виконує змінну операцію зменшення над елементами цього потоку. Змінне скорочення – це таке, у якому зменшене значення є змінним контейнером результату, таким як ArrayList, і елементи включені шляхом оновлення стану результату, а не шляхом заміни результату.
static Stream concat(Stream a, Stream b) Він створює ліниво зчеплений потік, елементами якого є всі елементи першого потоку, за якими йдуть усі елементи другого потоку. Результуючий потік є впорядкованим, якщо впорядковані обидва вхідні потоки, і паралельним, якщо будь-який із вхідних потоків є паралельним. Коли отриманий потік закривається, викликаються обробники закриття для обох вхідних потоків.
довгий рахунок() Він повертає кількість елементів у цьому потоці. Це окремий випадок скорочення.
Потік distinct() Він повертає потік, що складається з окремих елементів (відповідно до Object.equals(Object)) цього потоку.
статичний потік пустий() Він повертає порожній послідовний потік.
Фільтр потоку (предикатний предикат) Він повертає потік, що складається з елементів цього потоку, які відповідають заданому предикату.
Додатково findAny() Він повертає Optional, що описує деякий елемент потоку, або порожній Optional, якщо потік порожній.
Додатково findFirst() Він повертає Optional, що описує перший елемент цього потоку, або порожній Optional, якщо потік порожній. Якщо потік не має порядку зустрічі, тоді може бути повернутий будь-який елемент.
Потік flatMap(функціякартограф) Він повертає потік, що складається з результатів заміни кожного елемента цього потоку вмістом відображеного потоку, отриманого шляхом застосування наданої функції відображення до кожного елемента. Кожен зіставлений потік закривається після розміщення його вмісту в цьому потоці. (Якщо зіставлений потік має значення null, замість нього використовується порожній потік.)
DoubleStream flatMapToDouble (відповідач функцій) Він повертає DoubleStream, що складається з результатів заміни кожного елемента цього потоку вмістом відображеного потоку, отриманого шляхом застосування наданої функції відображення до кожного елемента. Кожен зіставлений потік закривається після розміщення його вмісту в цьому потоці. (Якщо зіставлений потік має значення null, замість нього використовується порожній потік.)
IntStream flatMapToInt(функція відображення) Він повертає IntStream, що складається з результатів заміни кожного елемента цього потоку вмістом відображеного потоку, отриманого шляхом застосування наданої функції відображення до кожного елемента. Кожен зіставлений потік закривається після розміщення його вмісту в цьому потоці. (Якщо зіставлений потік має значення null, замість нього використовується порожній потік.)
LongStream flatMapToLong (відповідач функцій) Він повертає LongStream, що складається з результатів заміни кожного елемента цього потоку вмістом відображеного потоку, отриманого шляхом застосування наданої функції відображення до кожного елемента. Кожен зіставлений потік закривається після розміщення його вмісту в цьому потоці. (Якщо зіставлений потік має значення null, замість нього використовується порожній потік.)
void forEach(дія споживача) Він виконує дію для кожного елемента цього потоку.
void forEachOrdered(дія споживача) Він виконує дію для кожного елемента цього потоку в порядку зустрічі потоку, якщо потік має визначений порядок зустрічі.
генерація статичного потоку (постачальники) Він повертає нескінченний послідовний невпорядкований потік, де кожен елемент генерується наданим постачальником. Це підходить для генерації постійних потоків, потоків випадкових елементів тощо.
static Stream iterate(T seed,UnaryOperator f) Він повертає нескінченний послідовний упорядкований потік, утворений ітеративним застосуванням функції f до початкового початкового елемента, утворюючи потік, що складається з початкового числа, f(початкового числа), f(f(початкового числа)) тощо.
Ліміт потоку (довгий максимальний розмір) Він повертає потік, що складається з елементів цього потоку, усічених так, щоб їх довжина не перевищувала maxSize.
Карта потоку (відповідач функцій) Він повертає потік, що складається з результатів застосування заданої функції до елементів цього потоку.
DoubleStream mapToDouble(ToDoubleFunction картограф) Він повертає DoubleStream, що складається з результатів застосування заданої функції до елементів цього потоку.
IntStream mapToInt(ToIntFunction картограф) Він повертає IntStream, що складається з результатів застосування заданої функції до елементів цього потоку.
LongStream mapToLong(ToLongFunction картограф) Він повертає LongStream, що складається з результатів застосування заданої функції до елементів цього потоку.
Додатковий максимум (компаратор компаратора) Він повертає максимальний елемент цього потоку відповідно до наданого компаратора. Це окремий випадок скорочення.
Необов’язковий min (компаратор компаратора) Він повертає мінімальний елемент цього потоку відповідно до наданого компаратора. Це окремий випадок скорочення.
boolean noneMatch(предикатний предикат) Він повертає елементи цього потоку, які відповідають наданому предикату. Якщо потік порожній, повертається true і предикат не оцінюється.
@SafeVarargs статичний потік (T... значень) Він повертає послідовний упорядкований потік, елементи якого є вказаними значеннями.
статичний потік (T t) Він повертає послідовний потік, що містить один елемент.
Перегляд потоку (дія споживача) Він повертає потік, що складається з елементів цього потоку, додатково виконуючи надану дію над кожним елементом, оскільки елементи споживаються з результуючого потоку.
Необов'язкове зменшення (акумулятор двійкового оператора) Він виконує скорочення елементів цього потоку, використовуючи функцію асоціативного накопичення, і повертає необов’язковий опис зменшеного значення, якщо воно є.
T зменшити (ідентифікатор T, акумулятор BinaryOperator) Він виконує скорочення елементів цього потоку, використовуючи надане значення ідентичності та функцію асоціативного накопичення, і повертає зменшене значення.
U зменшити (ідентифікація U, накопичувач BiFunction, комбайнер BinaryOperator) Він виконує скорочення елементів цього потоку, використовуючи надані функції ідентифікації, накопичення та об’єднання.
Пропуск потоку (довгий n) Він повертає потік, що складається з решти елементів цього потоку після відкидання перших n елементів потоку. Якщо цей потік містить менше n елементів, буде повернено порожній потік.
Потік відсортовано() Він повертає потік, що складається з елементів цього потоку, відсортованих відповідно до природного порядку. Якщо елементи цього потоку не є порівнянними, під час виконання операції терміналу може виникнути виняток java.lang.ClassCastException.
Потік відсортовано (компаратор компаратора) Він повертає потік, що складається з елементів цього потоку, відсортованих відповідно до наданого компаратора.
Object[] toArray() Він повертає масив, що містить елементи цього потоку.
A[] toArray(генератор IntFunction) Він повертає масив, що містить елементи цього потоку, використовуючи надану функцію генератора для виділення поверненого масиву, а також будь-яких додаткових масивів, які можуть знадобитися для розділеного виконання або для зміни розміру.

Приклад Java: фільтрація колекції без використання потоку

У наступному прикладі ми фільтруємо дані без використання потоку. Цей підхід ми використовували до випуску потокового пакета.

бінарне дерево java
 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = new ArrayList(); for(Product product: productsList){ // filtering data of list if(product.price<30000){ productpricelist.add(product.price); adding price to a productpricelist } system.out.println(productpricelist); displaying data < pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0, 28000.0] </pre> <hr> <h3>Java Stream Example: Filtering Collection by using Stream</h3> <p>Here, we are filtering data by using stream. You can see that code is optimized and maintained. Stream provides fast execution.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr> <h3>Java Stream Iterating Example</h3> <p>You can use stream to iterate any number of times. Stream provides predefined methods to deal with the logic you implement. In the following example, we are iterating, filtering and passed a limit to fix the iteration.</p> <pre> import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element-&gt;element+1) .filter(element-&gt;element%5==0) .limit(5) .forEach(System.out::println); } } </pre> <p> <strong>Output:</strong> </p> <pre> 5 10 15 20 25 </pre> <hr> <h3>Java Stream Example: Filtering and Iterating Collection</h3> <p>In the following example, we are using filter() method. Here, you can see code is optimized and very concise.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; System.out.println(product.name)); } } </pre> <p> <strong>Output:</strong> </p> <pre> Dell Laptop </pre> <hr> <h3>Java Stream Example : reduce() Method in Collection</h3> <p>This method takes a sequence of input elements and combines them into a single summary result by repeated operation. For example, finding the sum of numbers, or accumulating elements into a list. </p> <p>In the following example, we are using reduce() method, which is used to sum of all the product prices.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 201000.0 </pre> <hr> <h3>Java Stream Example: Sum by using Collectors Methods</h3> <p>We can also use collectors to compute sum of numeric values. In the following example, we are using Collectors class and it?s specified methods to compute sum of all the product prices.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;product.price)); System.out.println(totalPrice3); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 </pre> <hr> <h3>Java Stream Example: Find Max and Min Product Price</h3> <p>Following example finds min and max product price by using stream. It provides convenient way to find values without using imperative approach.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productB.price); } } </pre> <p> <strong>Output:</strong> </p> <pre> 90000.0 25000.0 </pre> <hr> <h3>Java Stream Example: count() Method in Collection</h3> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)></pre></30000){>

Приклад потоку Java: фільтрація колекції за допомогою потоку

Тут ми фільтруємо дані за допомогою потоку. Ви бачите, що код оптимізовано та підтримується. Потік забезпечує швидке виконання.

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } 

Вихід:

 [90000.0] 

Приклад ітерації потоку Java

Ви можете використовувати потік для повторення будь-яку кількість разів. Stream надає попередньо визначені методи для роботи з логікою, яку ви реалізуєте. У наступному прикладі ми виконуємо ітерацію, фільтруємо та передаємо обмеження, щоб виправити ітерацію.

 import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element-&gt;element+1) .filter(element-&gt;element%5==0) .limit(5) .forEach(System.out::println); } } 

Вихід:

 5 10 15 20 25 

Приклад потоку Java: фільтрація та ітерація колекції

У наступному прикладі ми використовуємо метод filter(). Тут ви бачите, що код оптимізований і дуже стислий.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; System.out.println(product.name)); } } 

Вихід:

 Dell Laptop 

Приклад потоку Java: метод reduce() у колекції

Цей метод бере послідовність вхідних елементів і об’єднує їх в єдиний підсумковий результат за допомогою повторної операції. Наприклад, знаходження суми чисел або накопичення елементів у список.

У наступному прикладі ми використовуємо метод reduce(), який використовується для підсумовування всіх цін на продукти.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } 

Вихід:

 201000.0 201000.0 

Приклад потоку Java: сума за допомогою методів збирачів

Ми також можемо використовувати колектори для обчислення суми числових значень. У наступному прикладі ми використовуємо клас Collectors і його визначені методи для обчислення суми всіх цін на продукти.

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;product.price)); System.out.println(totalPrice3); } } 

Вихід:

 201000.0 

Приклад потоку Java: знайдіть максимальну та мінімальну ціну продукту

Наступний приклад визначає мінімальну та максимальну ціну продукту за допомогою потоку. Він забезпечує зручний спосіб пошуку значень без використання імперативного підходу.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productB.price); } } 

Вихід:

 90000.0 25000.0 

Приклад потоку Java: метод count() у колекції

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)>

потік дозволяє збирати ваш результат у будь-якій різноманітній формі. Ви можете отримати результат у вигляді набору, списку або карти та виконувати маніпуляції з елементами.


Приклад потоку Java: перетворення списку на набір

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } 

Вихід:

 [25000.0, 28000.0] 

Приклад потоку Java: перетворення списку на карту

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } 

Вихід:

 {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} 

Посилання на метод у потоці

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } 

Вихід:

 [90000.0]