Dirò solo che stai attento a findFirst()
E findAny()
durante l'utilizzo.
A partire dal loro Javadoc ( qui e qui ) entrambi i metodi restituiscono un elemento arbitrario dal flusso - a meno che il flusso non abbia un ordine di incontro , nel qual caso findFirst()
restituisce il primo elemento mentre findAny()
restituirà qualsiasi elemento.
Supponiamo di avere un list
ISBN composto da un nome personalizzato e un nome LIBRO. Per uno scenario guarda questo esempio:
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());
}
Uscita :Optional[Java in Action]
Ci possono essere scenari in cui il nome del libro è lo stesso ma i numeri ISBN sono diversi, in tal caso l'ordinamento e la ricerca del libro possono essere molto simili findAny()
e daranno risultati errati. Pensa a uno scenario in cui 5 libri sono denominati "Riferimento Java" ma hanno numeri ISBN diversi e il findFirst()
libro per nome avrà lo stesso nome findAny()
.
Pensa a uno scenario in cui:
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 |
+-----+------------------+
qui findFirst () e findAny () daranno lo stesso risultato anche se ordinati su BookByName.
Articolo dettagliato:
filter
viene applicato un,findAny
può restituire qualsiasi elemento, incluso quello che non corrisponde al filtro applicato?