Причиной этого является Comparator
. Вы переворачиваете элементы после сортировки и получаете max
из них. Конечно, обратный max
- это min
, и вы получите тот же результат.
Решение было бы заменить
Optional<Integer> i = gt.max(Comparator.reverseOrder());
на
Optional<Integer> i = gt.max(Comparator.naturalOrder());
В несколько ином аспекте, когда вы ищете и max
, и min
из целочисленного потока одновременно можно использовать сводную статистику из JDK. Это выглядит примерно так -
IntSummaryStatistics statistics = li.stream().mapToInt(i -> i).summaryStatistics();
int max = statistics.getMax();
int min = statistics.getMin();