Если вы хотите найти максимальное значение, вы можете просто сделать:
list.stream()
.mapToInt(Integer::intValue)
.max();
Он вернет OptionalInt
, который будет пустым из вашего списка пуст.
В противном случае не уверены, чего хотите достичь с помощью своего кода ...
ОБНОВЛЕНИЕ После уточнения из оп.
Создайте небольшой класс с именем MinMax
, в котором хранятся min
и max
, например:
public class MinMax {
private final int min;
private final int max;
private MinMax(int min, int max) {
this.min = min;
this.max = max;
}
public int getDifference() {
return this.max - this.min;
}
public MinMax accept(int element) {
int newMin = element < min ? element : min;
int newMax = element > max ? element : max;
if (newMin != min || newMax != max) {
return new MinMax(newMin, newMax);
} else {
return this;
}
}
public static MinMax seed() {
return new MinMax(Integer.MAX_VALUE, Integer.MIN_VALUE);
}
}
Этот новый класс заботится о том, чтобы отслеживать как минимум, так и максимум.
Теперь вы можете сделать что-то вроде:
int result = list.stream()
.reduce(MinMax.seed(), MinMax::accept())
.getDifference();