У меня есть ряд двойных значений, которые я хочу суммировать и получить максимальное значение.
DoubleStream.summaryStatistics() звучит идеально для этого.
Метод getSum() имеет примечание API, напоминающее мне то, что я узнал на одном из моих курсов по информатике: стабильность проблемы суммирования имеет тенденцию быть лучше, если значения сортируются по их абсолютным значениям. Однако DoubleStream не позволяет мне указывать используемый компаратор, он просто будет использовать Double.compareTo, если я вызову sorted() в потоке.
Таким образом, я собрал значения в final Stream.Builder<Double> values = Stream.builder(); и вызвал
values.build()
.sorted(Comparator.comparingDouble(Math::abs))
.mapToDouble(a -> a).summaryStatistics();
Тем не менее, это выглядит несколько длинным, и я предпочел бы использовать DoubleStream.Builder вместо генератора.
Я что-то пропустил или действительно должен использовать коробчатую версию потока, чтобы указать компаратора?