Я написал простой код, как показано ниже. Этот класс отлично работает без каких-либо ошибок.
public class Test {
public static void main(String[] args) {
List<Integer> intList = IntStream.of(1,2,3,4,5,6,7,8,9,10).boxed().collect(Collectors.toList());
int value = intList.stream().max(Integer::compareTo).get();
//int value = intList.stream().max(<Comparator<? super T> comparator type should pass here>).get();
System.out.println("value :"+value);
}
}
Как видно из комментария к коду, метод max()
должен передавать аргумент типа Comparator<? super Integer>
Comparator<? super Integer>
.
Но Integer::compareTo
реализует интерфейс Comparable
не Comparator
.
public final class Integer extends Number implements Comparable<Integer> {
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
}
}
Как это может работать? Метод max()
говорит, что ему нужен аргумент Comparator
, но он работает с аргументом Comparable
.
Я знаю, что что-то неправильно понял, но теперь я знаю, что. Может кто-нибудь объяснить, пожалуйста?