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.