Nota: esta pergunta se origina de um link morto que era uma pergunta anterior do SO, mas aqui vai ...
Veja este código ( nota: eu sei que esse código não "funcionará" e que Integer::compare
deve ser usado - eu apenas o extraí da pergunta vinculada ):
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());
De acordo com o javadoc de .min()
e .max()
, o argumento de ambos deve ser a Comparator
. No entanto, aqui as referências de método são para métodos estáticos da Integer
classe.
Então, por que isso é compilado?
Integer
não são métodos de Comparator
.
Integer::compare
vez deInteger::max
eInteger::min
.