lbrobinho:
Cuando hice la prueba, me encuentro con un problema con la corriente.
El código es el siguiente:
public class HelloWorld {
public static void main(String []args) {
List<Integer> integers = Arrays.asList(-2, -5, -7, -16);
Integer integer = integers.stream().max(Math::max).orElse(0);
System.out.println(integer);
}
}
El valor de retorno es -15, el número mínimo en la lista. Pero cuando cambio máximo () para min (), me devuelve el valor máximo. ¿Por qué?
Eugene:
Esto es de alguna manera muy sutil, tomemos dos a la vez:
-2, -5 => Max between these two is "-2"
Es un negativo resultado, ya que max
el método de una stream
acepta una Comparator
, que dice:
devuelve un entero negativo si el primer argumento es menor que el segundo.
Así, de acuerdo a su Comparator
, usted acaba de decir que -5
> -2
o en palabras más simples:
Stream.of(-2, -5)
.max(Math::max)
.ifPresent(System.out::println); // will show -5
Usted puede construir su lógica de los otros números de aquí y entender por qué -16
es el resultado que se obtiene.
Para que esto sea correcta, es necesario:
...max(Comparator.naturalOrder())
....