Akışlar, koleksiyonların veya gelen veri akışlarının üzerine yapmak istediğiniz farklı işlemlerin bileşimi için çok daha iyi bir soyutlama sağlar. Özellikle öğeleri eşlemeniz, filtrelemeniz ve dönüştürmeniz gerektiğinde.
Örneğiniz pek pratik değil. Oracle sitesinden aşağıdaki kodu göz önünde bulundurun .
List<Transaction> groceryTransactions = new Arraylist<>();
for(Transaction t: transactions){
if(t.getType() == Transaction.GROCERY){
groceryTransactions.add(t);
}
}
Collections.sort(groceryTransactions, new Comparator(){
public int compare(Transaction t1, Transaction t2){
return t2.getValue().compareTo(t1.getValue());
}
});
List<Integer> transactionIds = new ArrayList<>();
for(Transaction t: groceryTransactions){
transactionsIds.add(t.getId());
}
akışları kullanarak yazılabilir:
List<Integer> transactionsIds =
transactions.stream()
.filter(t -> t.getType() == Transaction.GROCERY)
.sorted(comparing(Transaction::getValue).reversed())
.map(Transaction::getId)
.collect(toList());
İkinci seçenek çok daha okunur. Bu nedenle, kısmi işlem yapan iç içe döngüler veya çeşitli döngüler olduğunda, Streams / Lambda API kullanımı için çok iyi bir adaydır.