flux de Java max 8 (Math :: max)

lbrobinho:

Quand je l'ai fait le test, je rencontre un problème avec le flux.

Le code est ci-dessous:

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);

    }
} 

La valeur de retour est de -15, le nombre minimum dans la liste. Mais quand je change max () à min (), il me renvoie la valeur max. Pourquoi?

Eugène :

Ceci est en quelque sorte très subtile, nous allons prendre deux à la fois:

 -2, -5 => Max between these two is "-2"

Il est négatif résultat, puisque la maxméthode d'un streamaccepte Comparator, qui dit:

renvoie un entier négatif si le premier argument est inférieur au second.

Ainsi , selon votre Comparator, vous venez de dire que -5> -2ou des mots plus simples:

Stream.of(-2, -5)
            .max(Math::max)
            .ifPresent(System.out::println); // will show -5

Vous pouvez construire votre logique pour les autres chiffres d'ici et de comprendre pourquoi -16est le résultat que vous obtenez.

Pour ce correct, vous avez besoin:

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

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=224826&siteId=1
conseillé
Classement