Ich werde nur sagen, dass Vorsicht vor findFirst()
und findAny()
während der Verwendung.
Ab ihrem Javadoc ( hier und hier ) geben beide Methoden ein beliebiges Element aus dem Stream zurück - es sei denn, der Stream hat eine Begegnungsreihenfolge . In diesem Fall wird findFirst()
das erste Element zurückgegeben, während findAny()
ein beliebiges Element zurückgegeben wird.
Angenommen, wir haben einen benutzerdefinierten list
ISBN- und BOOK-Namen. Ein Szenario finden Sie in diesem Beispiel:
public class Solution {
private Integer ISBN;
private String BookName;
public Solution(int i, String string) {
ISBN =i;
BookName = string;
}
//getters and setters
}
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());
}
Ausgabe :Optional[Java in Action]
Es kann Szenarien geben, in denen der Buchname identisch ist, die ISBN-Nummern jedoch unterschiedlich sind. In diesem Fall kann das Sortieren und Auffinden des Buches dem Buch sehr ähnlich sein findAny()
und zu falschen Ergebnissen führen. Stellen Sie sich ein Szenario vor, in dem 5 Bücher den Namen "Java Reference" tragen, aber unterschiedliche ISBN-Nummern haben und das findFirst()
Buch nach Namen dasselbe ergibt wie findAny()
.
Stellen Sie sich ein Szenario vor, in dem:
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 |
+-----+------------------+
Hier liefern findFirst () und findAny () das gleiche Ergebnis, auch wenn sie nach BookByName sortiert sind.
Ausführlicher Artikel:
filter
angewendet wird,findAny
jedes Element zurückkehren können, einschließlich , dass nicht der Filter angewendet überein?