Пусть есть IntStream, возможно ли получить из него допустим массив или лист, в котором будут 2 значения min и max стрима? Либо можно ли вообще каким-то образом вызвать терминальный метод на стрим больше 1 раза?
IntSummaryStatistics stats = IntStream.range(1, 100)
.summaryStatistics();
int min = stats.getMin();
int max = stats.getMax();
Нет, стрим позволяет пройтись по нему только один раз (а если нижележащий сплитератор выстрелит, то можно и вообще не дойти до конца). Но это не значит, что вы не можете одновременно собирать и максимум, и минимум:
private static class Result {
private Integer minimum;
private Integer maximum;
public Integer getMinimum() {
return minimum;
}
public Integer getMaximum() {
return maximum;
}
public synchronized Result update(int value) {
if (minimum == null || minimum > value) {
minimum = value;
}
if (maximum == null || maximum < value) {
maximum = value;
}
return this;
}
public synchronized void combine(Result other) {
if (other.getMinimum() != null) {
update(other.getMinimum());
}
if (other.getMaximum() != null) {
update(other.getMaximum());
}
}
@Override
public String toString() {
return "Result {minimum=" + minimum + ", maximum=" + maximum + "}";
}
}
public static Result compute(IntStream stream) {
return stream.collect(Result::new, Result::update, Result::combine);
}
Конечно можно! Вот Ваш массив:
int[] miniMax = IntStream.range(1, 11).collect(() -> {
return new int[] { Integer.MAX_VALUE, Integer.MIN_VALUE };
}, (t, value) -> {
if (t[0] > value) t[0] = value;
if (t[1] < value) t[1] = value;
}, (t, u) -> {
if (t[0] > u[0]) t[0] = u[0];
if (t[1] < u[1]) t[1] = u[1];
});
int min = miniMax[0];
int max = miniMax[1];
Если попадётся пустой stream, то получится невероятный результат min == 2147483647
и max == -2147483648
Условие что получено именно то, что надо: min <= max
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Заполняю очередь 10-ю сообщениями, начинаю их считывать 10-ю потокамиВ идеале эти 10 сообщений я и должен получить обратно, но вместо этого получаю...