Java max 8 de flujo (Matemáticas :: max)

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 maxel método de una streamacepta 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> -2o 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é -16es el resultado que se obtiene.

Para que esto sea correcta, es necesario:

 ...max(Comparator.naturalOrder())
   ....

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=224828&siteId=1
Recomendado
Clasificación