मैं सिर्फ इतना कहूंगा कि उपयोग करते समय findFirst()
और से सावधान रहें findAny()
।
जैसा कि उनके जावदोक से ( यहां और यहां ) दोनों विधियां धारा से एक मनमाना तत्व लौटाती हैं - जब तक कि धारा का एक मुठभेड़ क्रम नहीं होता है , जिस स्थिति में कोई भी तत्व वापस findFirst()
करते समय पहला तत्व findAny()
वापस आ जाता है।
मान लें कि हमारे पास कस्टम list
नाम आईएसबीएन और बुक नाम है। एक परिदृश्य के लिए इस उदाहरण को देखें:
public class Solution {
private Integer ISBN;
private String BookName;
public Solution(int i, String string) {
ISBN =i;
BookName = string;
}
}
public static void main(String[] args) {
List<Solution> Library = Arrays.asList(new Solution(12,"Java in Action"),new Solution(13,"Java 8"),new Solution(15,"Java 8 Features"),new Solution(16,"Java in Action"));
System.out.println(Library.stream()
.map(p->p.getBookName())
.sorted(Comparator.reverseOrder())
.findFirst());
}
आउटपुट :Optional[Java in Action]
पुस्तक का नाम समान होने पर परिदृश्य हो सकते हैं लेकिन आईएसबीएन संख्या भिन्न होती है, उस मामले में छंटनी और पुस्तक को ढूंढना काफी हद तक समान हो सकता है findAny()
और गलत परिणाम देगा। ऐसे परिदृश्य के बारे में सोचें जहां 5 पुस्तकों को "जावा संदर्भ" नाम दिया गया है, लेकिन आईएसबीएन की अलग-अलग संख्याएँ हैं और findFirst()
नाम से पुस्तक उसी के परिणामस्वरूप होगी findAny()
।
एक परिदृश्य के बारे में सोचो जहां:
ISBN Name Of book
+-----+------------------+
| 100 | Java-8 in Action |
+-----+------------------+
| 101 | Java-8 in Action |
+-----+------------------+
| 102 | Java-8 in Action |
+-----+------------------+
| 103 | Java-8 in Action |
+-----+------------------+
| 104 | Java-8 in Action |
+-----+------------------+
यहाँ findFirst () और findAny () BookByName पर छाँटे जाने पर भी वही परिणाम देगा।
विस्तृत लेख:
filter
वह लागू होने के बाद भी है,findAny
क्या किसी भी तत्व को वापस कर सकता है, जिसमें शामिल फ़िल्टर से मेल नहीं खाता है?