Ben sadece dikkat findFirst()
ve findAny()
kullanırken söyleyeceğim .
Javadoc'larından ( burada ve burada ) itibaren her iki yöntem de akıştan rastgele bir öğe döndürür - akışın bir karşılaşma sırası yoksa, bu durumda findFirst()
ilk öğeyi findAny()
döndürürken herhangi bir öğeyi döndürür.
Özel olarak list
oluşan ISBN ve KİTAP adımız olduğunu varsayalım . Bir senaryo için şu örneğe bakın:
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());
}
Çıktı :Optional[Java in Action]
Kitap adının aynı olduğu ancak ISBN numaralarının farklı olduğu senaryolar olabilir, bu durumda kitabı sıralamak ve bulmak çok benzer olabilir findAny()
ve yanlış sonuç verir. 5 kitabın "Java Referansı" olarak adlandırıldığı, ancak farklı ISBN numaralarına sahip olduğu ve findFirst()
ada göre kitabın aynı sonuca ulaşacağı bir senaryo düşünün findAny()
.
Aşağıdaki durumlarda bir senaryo düşünün:
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 |
+-----+------------------+
burada findFirst () ve findAny () BookByName üzerinde sıralansa bile aynı sonucu verecektir .
Ayrıntılı Makale:
filter
uygulandıktan sonra bile , uygulananfindAny
filtreyle eşleşmeyenler dahil herhangi bir öğe döndürebilir mi?