Примечание: этот вопрос возник из мертвой ссылки, которая была предыдущим вопросом SO, но здесь идет ...
Посмотрите этот код ( примечание: я знаю, что этот код не будет «работать» и его Integer::compareследует использовать - я просто извлек его из связанного вопроса ):
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());
Согласно Javadoc .min()и .max(), аргумент обоих должен быть Comparator. И все же здесь ссылки на методы относятся к статическим методам Integerкласса.
Итак, почему это компилируется вообще?
Integerне являются методами Comparator.
Integer::compareвместоInteger::maxиInteger::min.