Solo diré que tenga cuidado con findFirst()
Y findAny()
mientras lo usa.
A partir de su Javadoc ( aquí y aquí ) ambos métodos devuelven un elemento arbitrario de la secuencia, a menos que la secuencia tenga un orden de encuentro , en cuyo caso findFirst()
devuelve el primer elemento mientras findAny()
que devolverá cualquier elemento.
Supongamos que tenemos un list
ISBN y un nombre de LIBRO personalizados. Para ver un escenario, mire este ejemplo:
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());
}
Salida :Optional[Java in Action]
Puede haber situaciones en las que el nombre del libro es el mismo pero los números de ISBN son diferentes; en ese caso, ordenar y encontrar el libro puede ser muy similar findAny()
y producirá un resultado incorrecto. Piense en un escenario en el que 5 libros se denominan "Referencia de Java" pero tienen diferentes números ISBN y el resultado del findFirst()
libro por nombre es el mismo que findAny()
.
Piense en un escenario en el que:
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 |
+-----+------------------+
aquí findFirst () y findAny () darán el mismo resultado incluso si se ordenan en BookByName.
Artículo detallado:
filter
se aplique un, ¿findAny
puede devolver cualquier elemento, incluido el que no coincide con el filtro aplicado?