Aşağıdaki örnekte bir Integer dizisinin, tüm elemanlarının karaleri alınıp toplanmaktadır :
package com.test.stream;
import java.util.Arrays;
import java.util.List;
public class StreamTest {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = list.stream()
.filter(number -> number % 2 == 0)
.mapToInt(number -> number * number)
.sum();
System.out.println("elemanların karelerinin toplamı : "+sum);
}
}
list.stream() ile Stream başlatılır. .filter(number -> number % 2 == 0) ile sadece çift sayılar alınır. .mapToInt(number -> number * number) ile her elemanın karesi alınıp yeni bir liste oluşturulur ve en son toplam değeri alınır.
Aşağıdaki örnekte bir sınavda 50 ve üzeri alan öğrencileri bulan ve onu en yüksek puandan en düşük puana gelecek şekilde sıralayan ve ekrana basan örnek aşağıdaki gibidir :
package com.test.stream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamTestExam {
public static void main(String[] args) {
List<ExamResult> results=new ArrayList<ExamResult>();
results.add(new ExamResult("Ali Kaya", 56));
results.add(new ExamResult("Veli Deniz", 60));
results.add(new ExamResult("Ayşe Gül", 14));
results.add(new ExamResult("Ahmet Güler", 44));
results.add(new ExamResult("Arzu Yanar", 80));
List<ExamResult> resultList=results.stream()
.filter(result -> result.getPoint() >= 50)
.sorted((result1,result2) ->
((Integer)result2.getPoint()).compareTo(result1.getPoint()))
.collect(Collectors.toList());
resultList.forEach(r -> System.out.println(r.getName()+":"+r.getPoint()));
}
}
ExamResult sınıfı aşağıdaki gibidir:
package com.test.stream;
public class ExamResult {
public ExamResult(String name, int point) {
this.name=name;
this.point=point;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
private String name;
private int point;
}
İlk önce .filter(result -> result.getPoint() >= 50) ile 50 ve üstünü almış öğrencileri alıyoruz. .sorted((result1,result2) -> ((Integer)result2.getPoint()).compareTo(result1.getPoint())) ile öğrencileri sınav sorularına göre ters olarak sıralıyoruz. (result2 ile result1 ters sırada olduğuna dikkat ediniz). Ardından .collect(Collectors.toList()); ile sonucu bir listeye dolduruyoruz. En sondaki satırda ise tüm elemanları ekrana bastırıyoruz :
Arzu Yanar:80
Veli Deniz:60
Ali Kaya:56
Listeyi almadan da bastırabilirdik :
results.stream()
.filter(result -> result.getPoint() >= 50)
.sorted((result1,result2) ->
((Integer)result2.getPoint()).compareTo(result1.getPoint()))
.forEach(r -> System.out.println(r.getName()+":"+r.getPoint()));
Burada collect ile bir listeye doldurmak yetine doğrudan foreach'i çalıştırdık.