धाराएँ उन विभिन्न ऑपरेशनों की रचना के लिए बहुत बेहतर अमूर्तता प्रदान करती हैं, जो आप डेटा के संग्रह या धाराओं के शीर्ष पर करना चाहते हैं। विशेष रूप से जब आपको तत्वों को मैप करने, फ़िल्टर करने और उन्हें परिवर्तित करने की आवश्यकता होती है।
आपका उदाहरण बहुत व्यावहारिक नहीं है। ओरेकल साइट से निम्नलिखित कोड पर विचार करें ।
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());
}
धाराओं का उपयोग करके लिखा जा सकता है:
List<Integer> transactionsIds =
transactions.stream()
.filter(t -> t.getType() == Transaction.GROCERY)
.sorted(comparing(Transaction::getValue).reversed())
.map(Transaction::getId)
.collect(toList());
दूसरा विकल्प बहुत अधिक पठनीय है। इसलिए जब आपने आंशिक प्रसंस्करण करते हुए छोरों या विभिन्न छोरों को घोंसला बनाया है, तो यह स्ट्रीम / लैम्ब्डा एपीआई उपयोग के लिए बहुत अच्छा उम्मीदवार है।