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 max
méthode d'un stream
accepte 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
> -2
ou 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 -16
est le résultat que vous obtenez.
Pour ce correct, vous avez besoin:
...max(Comparator.naturalOrder())
....