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::comparedeve 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 Integerclasse.
Então, por que isso é compilado?
Integernão são métodos de Comparator.
Integer::comparevez deInteger::maxeInteger::min.