Saya hanya akan mengatakan bahwa waspadalah terhadap findFirst()
Dan findAny()
saat menggunakan.
Dari Javadoc mereka (di sini dan di sini ) kedua metode mengembalikan elemen arbitrer dari aliran - kecuali aliran memiliki urutan pertemuan , dalam hal ini findFirst()
mengembalikan elemen pertama sementara findAny()
akan mengembalikan elemen apa pun.
Misalkan kita memiliki list
nama ISBN dan BUKU yang terdiri dari custom . Untuk skenario, lihat contoh ini:
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());
}
Keluaran :Optional[Java in Action]
Ada beberapa skenario ketika nama Buku sama tetapi nomor ISBN berbeda, dalam hal ini penyortiran dan pencarian buku bisa sangat mirip findAny()
dan akan memberikan hasil yang salah. Pikirkan skenario di mana 5 buku diberi nama "Referensi Java" tetapi memiliki nomor ISBN yang berbeda dan findFirst()
buku berdasarkan nama akan menghasilkan sama seperti findAny()
.
Pikirkan skenario di mana:
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 |
+-----+------------------+
di sini findFirst () dan findAny () akan memberikan hasil yang sama meskipun diurutkan di BookByName.
Artikel Rinci:
filter
diterapkan,findAny
dapat mengembalikan elemen apa pun, termasuk yang tidak cocok dengan filter yang diterapkan?