Tôi sẽ chỉ nói rằng hãy cẩn thận findFirst()
Và findAny()
trong khi sử dụng.
Từ Javadoc của họ ( ở đây và ở đây ), cả hai phương thức đều trả về một phần tử tùy ý từ luồng - trừ khi luồng có thứ tự gặp phải , trong trường hợp này findFirst()
trả về phần tử đầu tiên while findAny()
sẽ trả về bất kỳ phần tử nào.
Giả sử chúng ta có list
ISBN và tên SÁCH tùy chỉnh . Để có kịch bản, hãy xem ví dụ này:
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());
}
Đầu ra :Optional[Java in Action]
Có thể có trường hợp khi Tên sách giống nhau nhưng số ISBN khác nhau, trong trường hợp đó, việc phân loại và tìm sách có thể giống nhau nhiều findAny()
và sẽ cho kết quả sai. Hãy nghĩ đến tình huống có 5 cuốn sách được đặt tên là "Tài liệu tham khảo Java" nhưng có số ISBN khác nhau và findFirst()
cuốn sách theo tên sẽ dẫn đến kết quả giống như findAny()
.
Hãy nghĩ về một tình huống trong đó:
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 |
+-----+------------------+
ở đây findFirst () và findAny () sẽ cho cùng một kết quả ngay cả khi được sắp xếp trên BookByName.
Bài viết chi tiết:
filter
áp dụng a,findAny
có thể trả về bất kỳ phần tử nào, bao gồm cả phần tử không khớp với bộ lọc được áp dụng?