Java 8 stream .min() et .max(): pourquoi cette compilation?

Remarque: cette question provient d'un lien mort, qui a été un précédent DONC, la question, mais voilà...

Voir ce code (note: je sais que ce code ne marche pas et que Integer::compare doit être utilisé -- je viens de l'extraction de la question liée):

final ArrayList <Integer> list 
    = IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList());

System.out.println(list.stream().max(Integer::max).get());
System.out.println(list.stream().min(Integer::min).get());

Selon la javadoc de .min() et .max(), l'argument des deux doit être un Comparator. Pourtant, ici, la méthode des références à des méthodes statiques de la Integer classe.

Alors, pourquoi est-ce de la compilation à tous?

  • Notez que cela ne fonctionne pas correctement, il doit être à l'aide de Integer::compare au lieu de Integer::max et Integer::min.
  • Je sais que; note comment je l'ai dit avant que le code de l'extrait de "je sais, c'est absurde"
  • Je n'étais pas en train de vous corriger, je dis aux gens en général. Vous avez fait le bruit comme si vous pensiez que la partie qui est absurde, c'est que les méthodes de Integer ne sont pas des méthodes de Comparator.
InformationsquelleAutor fge | 2014-03-21