Java, Java 8'de java.util.stream adında yeni bir ek paket sağlar. Bu paket, elemanlar üzerinde işlevsel tarzda işlemlere izin veren sınıflardan, arayüzlerden ve numaralandırmadan oluşur. Java.util.stream paketini içe aktararak akışı kullanabilirsiniz.
Akış aşağıdaki özellikleri sağlar:
- Akış öğeleri saklamaz. Basitçe veri yapısı, dizi veya G/Ç kanalı gibi bir kaynaktan gelen öğeleri hesaplamalı işlemlerden oluşan bir boru hattı aracılığıyla iletir.
- Akış doğası gereği işlevseldir. Bir akış üzerinde gerçekleştirilen işlemler akışın kaynağını değiştirmez. Örneğin, bir koleksiyondan elde edilen bir Akışın filtrelenmesi, kaynak koleksiyondan öğelerin kaldırılması yerine, filtrelenen öğeler olmadan yeni bir Akış üretir.
- Akış tembeldir ve kodu yalnızca gerektiğinde değerlendirir.
- Bir akışın elemanları, akışın ömrü boyunca yalnızca bir kez ziyaret edilir. Bir Yineleyici gibi, kaynağın aynı öğelerini yeniden ziyaret etmek için yeni bir akışın oluşturulması gerekir.
Stream'i filtrelemek, toplamak, yazdırmak ve bir veri yapısından diğerine dönüştürmek vb. için kullanabilirsiniz. Aşağıdaki örneklerde, akışın yardımıyla çeşitli işlemler uyguladık.
Java Akış Arayüzü Yöntemleri
Yöntemler | Tanım |
---|---|
boolean allMatch(Yüklem yüklemi) | Bu akışın sağlanan yüklemle eşleşen tüm öğelerini döndürür. Akış boşsa true değeri döndürülür ve yüklem değerlendirilmez. |
boolean anyMatch(Yüklem yüklemi) | Bu akışın sağlanan yüklemle eşleşen herhangi bir öğesini döndürür. Akış boşsa false değeri döndürülür ve yüklem değerlendirilmez. |
statik Stream.Builder oluşturucu() | Bir Akış için bir oluşturucu döndürür. |
R toplama (Kolektör toplayıcı) | Bir Kollektör kullanarak bu akışın elemanları üzerinde değiştirilebilir bir azaltma işlemi gerçekleştirir. Bir Toplayıcı, toplama argümanları olarak kullanılan işlevleri (Tedarikçi, BiConsumer, BiConsumer) kapsülleyerek toplama stratejilerinin yeniden kullanılmasına ve çok düzeyli gruplama veya bölümleme gibi toplama işlemlerinin oluşturulmasına olanak tanır. |
R Collect(Tedarikçi tedarikçisi, BiConsumer akümülatörü, BiConsumer birleştiricisi) | Bu akışın elemanları üzerinde değişken bir indirgeme işlemi gerçekleştirir. Değişken bir indirgeme, azaltılmış değerin ArrayList gibi değişken bir sonuç kapsayıcısı olduğu ve öğelerin, sonucu değiştirmek yerine sonucun durumu güncellenerek dahil edildiği indirgemedir. |
statik Akış concat(Akış a, Akış b) | Öğeleri birinci akışın tüm öğeleri ve ardından ikinci akışın tüm öğeleri olan tembel bir şekilde birleştirilmiş bir akış oluşturur. Her iki giriş akışı da sıralıysa sonuçtaki akış sıralanır ve giriş akışlarından herhangi biri paralelse paraleldir. Ortaya çıkan akış kapatıldığında, her iki giriş akışı için de kapatma işleyicileri çağrılır. |
uzun sayım() | Bu akıştaki öğelerin sayısını döndürür. Bu, azalmanın özel bir durumudur. |
Farklı akış() | Bu akışın farklı öğelerinden (Object.equals(Object) göre) oluşan bir akış döndürür. |
statik Akış boş() | Boş bir sıralı Akış döndürür. |
Akış filtresi(Yüklem yüklemi) | Bu akışın verilen yüklemle eşleşen öğelerinden oluşan bir akış döndürür. |
İsteğe bağlı findAny() | Akışın bazı öğelerini tanımlayan bir Optional veya akış boşsa boş bir Optional döndürür. |
İsteğe bağlı findFirst() | Bu akışın ilk öğesini tanımlayan bir Optional'ı veya akış boşsa boş bir Optional'ı döndürür. Akışın karşılaşma sırası yoksa herhangi bir öğe döndürülebilir. |
FlatMap akışı (İşlev super T,? extends Stream>haritacı) | Bu akışın her bir öğesinin, sağlanan eşleme fonksiyonunun her bir öğeye uygulanmasıyla üretilen eşlenmiş bir akışın içeriğiyle değiştirilmesinin sonuçlarından oluşan bir akış döndürür. Eşlenen her akış, içeriği bu akışa yerleştirildikten sonra kapatılır. (Eşlenen bir akış null ise bunun yerine boş bir akış kullanılır.) |
DoubleStream flatMapToDouble(İşlev eşleyici) | Bu akışın her bir öğesinin, sağlanan eşleme işlevinin her bir öğeye uygulanmasıyla üretilen eşlenmiş bir akışın içeriğiyle değiştirilmesinin sonuçlarından oluşan bir DoubleStream döndürür. Eşlenen her akış, içeriği bu akışa yerleştirildikten sonra kapatılır. (Eşlenen bir akış null ise bunun yerine boş bir akış kullanılır.) |
IntStream flatMapToInt(İşlev eşleyici) | Bu akışın her bir öğesinin, sağlanan eşleme işlevinin her bir öğeye uygulanmasıyla üretilen eşlenmiş bir akışın içeriğiyle değiştirilmesinin sonuçlarından oluşan bir IntStream döndürür. Eşlenen her akış, içeriği bu akışa yerleştirildikten sonra kapatılır. (Eşlenen bir akış null ise bunun yerine boş bir akış kullanılır.) |
LongStream flatMapToLong(İşlev eşleyici) | Bu akışın her bir öğesinin, sağlanan eşleme işlevinin her bir öğeye uygulanmasıyla üretilen eşlenmiş bir akışın içeriğiyle değiştirilmesinin sonuçlarından oluşan bir LongStream döndürür. Eşlenen her akış, içeriği bu akışa yerleştirildikten sonra kapatılır. (Eşlenen bir akış null ise bunun yerine boş bir akış kullanılır.) |
void forEach(Tüketici eylemi) | Bu akışın her öğesi için bir eylem gerçekleştirir. |
void forEachOrdered(Tüketici eylemi) | Akışın tanımlanmış bir karşılaşma sırası varsa, bu akışın her öğesi için akışın karşılaşma sırasına göre bir eylem gerçekleştirir. |
statik Akış oluşturma (Tedarikçilerin) | Her öğenin sağlanan Tedarikçi tarafından oluşturulduğu sonsuz sıralı, sırasız bir akış döndürür. Bu, sabit akışlar, rastgele öğelerin akışları vb. oluşturmak için uygundur. |
statik Akış yinelemesi (T tohumu, UnaryOperator f) | Bir f fonksiyonunun bir başlangıç öğesi tohumuna yinelemeli uygulanmasıyla üretilen, tohum, f(seed), f(f(seed)) vb.'den oluşan bir Akış üreten sonsuz sıralı sıralı bir Akış döndürür. |
Akış sınırı (uzun maxSize) | Bu akışın öğelerinden oluşan, uzunluğu maxSize'dan daha uzun olmayacak şekilde kesilmiş bir akış döndürür. |
Akış haritası (İşlev eşleyici) | Verilen fonksiyonun bu akışın elemanlarına uygulanmasının sonuçlarından oluşan bir akış döndürür. |
DoubleStream haritasıToDouble(ToDoubleFunction eşleyicisi) | Verilen fonksiyonun bu akışın elemanlarına uygulanmasının sonuçlarından oluşan bir DoubleStream döndürür. |
IntStream haritasıToInt(ToIntFunction eşleyicisi) | Verilen fonksiyonun bu akışın elemanlarına uygulanmasının sonuçlarından oluşan bir IntStream döndürür. | LongStream haritasıToLong(ToLongFunction eşleyicisi) | Verilen fonksiyonun bu akışın elemanlarına uygulanmasının sonuçlarından oluşan bir LongStream döndürür. |
İsteğe bağlı maksimum (Karşılaştırıcı karşılaştırıcı) | Sağlanan Karşılaştırıcıya göre bu akışın maksimum öğesini döndürür. Bu, azalmanın özel bir durumudur. |
İsteğe bağlı min (Karşılaştırıcı karşılaştırıcı) | Sağlanan Karşılaştırıcıya göre bu akışın minimum öğesini döndürür. Bu, azalmanın özel bir durumudur. |
boolean noneMatch(Yüklem yüklemi) | Bu akışın, sağlanan yüklemle eşleşen öğelerini döndürür. Akış boşsa true değeri döndürülür ve yüklem değerlendirilmez. |
@SafeVarargs statik Akışı (T... değerleri) | Öğeleri belirtilen değerler olan sıralı bir akış döndürür. |
Statik Akış (T t) | Tek bir öğe içeren sıralı bir Akış döndürür. |
Akışa göz atma (Tüketici eylemi) | Bu akışın öğelerinden oluşan bir akış döndürür, ayrıca elde edilen akıştan öğeler tüketildikçe her öğe üzerinde sağlanan eylemi gerçekleştirir. |
İsteğe bağlı azaltma (İkili Operatör akümülatörü) | İlişkisel birikim işlevini kullanarak bu akışın öğeleri üzerinde bir azaltma gerçekleştirir ve varsa azaltılmış değeri açıklayan bir İsteğe Bağlı döndürür. |
T azalt(T kimliği, BinaryOperator akümülatörü) | Sağlanan kimlik değerini ve ilişkisel birikim işlevini kullanarak bu akışın öğeleri üzerinde bir azaltma gerçekleştirir ve indirgenmiş değeri döndürür. |
U azalt(U kimliği, BiFunction akümülatör, BinaryOperator birleştirici) | Sağlanan kimlik, biriktirme ve birleştirme fonksiyonlarını kullanarak bu akışın elemanları üzerinde bir azaltma gerçekleştirir. |
Akış atlama (uzun n) | Akışın ilk n elemanı atıldıktan sonra bu akışın geri kalan elemanlarından oluşan bir akış döndürür. Bu akışın n'den az öğe içermesi durumunda boş bir akış döndürülür. |
Akış sıralandı() | Bu akışın elemanlarından oluşan, doğal sırasına göre sıralanmış bir akış döndürür. Bu akışın öğeleri Karşılaştırılabilir değilse, terminal işlemi yürütüldüğünde bir java.lang.ClassCastException oluşturulabilir. |
Akış sıralandı (Karşılaştırıcı karşılaştırıcı) | Bu akışın öğelerinden oluşan, sağlanan Karşılaştırıcıya göre sıralanmış bir akış döndürür. |
Object[] toArray() | Bu akışın elemanlarını içeren bir dizi döndürür. |
A[] toArray(IntFunction oluşturucu) | Döndürülen diziyi tahsis etmek için sağlanan oluşturucu işlevini kullanarak bu akışın öğelerini içeren bir diziyi ve ayrıca bölümlenmiş bir yürütme veya yeniden boyutlandırma için gerekli olabilecek ek dizileri döndürür. |
Java Örneği: Akışı kullanmadan Koleksiyonu Filtreleme
Aşağıdaki örnekte verileri akış kullanmadan filtreliyoruz. Bu yaklaşımı akış paketi yayınlanmadan önce kullanıyorduk.
soyut bir sınıfın yapıcısı olabilir mi
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList2 =productsList.stream() .filter(p -> p.price > 30000)// filtering data .map(p->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->element+1) .filter(element->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -> product.price == 30000) .forEach(product -> 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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product->product.price) .reduce(0.0f,(sum, price)->sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Using Collectors's method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)->product1.price > 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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 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 Akışı Örneği: Akışı kullanarak Koleksiyonu Filtreleme
Burada akışı kullanarak verileri filtreliyoruz. Kodun optimize edildiğini ve korunduğunu görebilirsiniz. Akış hızlı yürütme sağlar.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList2 =productsList.stream() .filter(p -> p.price > 30000)// filtering data .map(p->p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } }
Çıktı:
[90000.0]
Java Akışı Yineleme Örneği
İstediğiniz sayıda yinelemek için akışı kullanabilirsiniz. Stream, uyguladığınız mantıkla başa çıkmak için önceden tanımlanmış yöntemler sağlar. Aşağıdaki örnekte, yinelemeyi düzeltmek için yineleme yapıyoruz, filtreliyoruz ve bir limit geçiyoruz.
import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element->element+1) .filter(element->element%5==0) .limit(5) .forEach(System.out::println); } }
Çıktı:
5 10 15 20 25
Java Akışı Örneği: Koleksiyonun Filtrelenmesi ve Yinelenmesi
Aşağıdaki örnekte filter() yöntemini kullanıyoruz. Burada kodun optimize edildiğini ve çok kısa olduğunu görebilirsiniz.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -> product.price == 30000) .forEach(product -> System.out.println(product.name)); } }
Çıktı:
Dell Laptop
Java Akışı Örneği: Koleksiyondaki reduc() Yöntemi
Bu yöntem, bir dizi girdi öğesini alır ve tekrarlanan işlemlerle bunları tek bir özet sonuçta birleştirir. Örneğin sayıların toplamını bulmak veya öğeleri bir listede toplamak.
Aşağıdaki örnekte tüm ürün fiyatlarının toplamını almak için kullanılan azalt() yöntemini kullanıyoruz.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product->product.price) .reduce(0.0f,(sum, price)->sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product->product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } }
Çıktı:
201000.0 201000.0
Java Akışı Örneği: Toplayıcı Yöntemlerini kullanarak toplama
Sayısal değerlerin toplamını hesaplamak için de toplayıcıları kullanabiliriz. Aşağıdaki örnekte tüm ürün fiyatlarının toplamını hesaplamak için Collectors sınıfını ve onun belirlediği yöntemleri kullanıyoruz.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Using Collectors's method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product->product.price)); System.out.println(totalPrice3); } }
Çıktı:
201000.0
Java Akışı Örneği: Maksimum ve Minimum Ürün Fiyatını Bulun
Aşağıdaki örnek, akışı kullanarak minimum ve maksimum ürün fiyatını bulur. Zorunlu yaklaşımı kullanmadan değerleri bulmanın kolay bir yolunu sağlar.
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productB.price); } }
Çıktı:
90000.0 25000.0
Java Akışı Örneği: Koleksiyondaki count() Yöntemi
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 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)>
Stream, sonucunuzu çeşitli biçimlerde toplamanıza olanak tanır. Sonuçlarınızı set, liste veya harita olarak alabilir ve elementler üzerinde manipülasyon yapabilirsiniz.
Java Akışı Örneği: Listeyi Kümeye Dönüştür
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } }
Çıktı:
[25000.0, 28000.0]
Java Akışı Örneği: Listeyi Haritaya Dönüştür
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->p.name)); System.out.println(productPriceMap); } }
Çıktı:
{1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop}
Akıştaki Yöntem Referansı
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,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } }
Çıktı:
[90000.0]
30000)>30000){>