У меня есть ряд двойных значений, которые я хочу суммировать и получить максимальное значение.
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
вместо генератора.
Я что-то пропустил или действительно должен использовать коробчатую версию потока, чтобы указать компаратора?