Как мне суммировать двойные значения потока карты в streamex?
Библиотека StreamEx, кажется, действительно помогает мне писать потоки Java 8 кратко, особенно при рассмотрении карт (используя mapKeyValue
Например, вместо того, чтобы распаковывать записи карты вручную).
Если у меня есть поток записей на карте, в ванильной Java 8 я могу суммировать значения следующим образом:
someMap.entrySet().stream()
.mapToDouble(Entry::getValue)
.sum()
и я могу сделать это и в StreamEx, но я ожидал увидеть лучший способ сделать это в StreamEx, хотя лучшее, что я могу придумать, это:
EntryStream.of(someMap)
.values()
.mapToDouble(d -> d)
.sum();
что не лучше.
Есть ли лучший способ, по которому я скучаю?
1 ответ
Так как вас интересуют только значения Map
Вы можете просто иметь:
double sum = someMap.values().stream().mapToDouble(d -> d).sum();
используя сам Stream API. Это создает Stream<Double>
непосредственно из значений карты, сопоставляет это с примитивом DoubleStream
и возвращает сумму.
Используя StreamEx, вы можете упростить это до:
double sum = DoubleStreamEx.of(someMap.values()).sum();
с помощью DoubleStreamEx.of
принимая непосредственно Collection<Double>
,
Если у вас уже есть EntryStream
вы не сможете иметь ничего проще, чем:
double sum = entryStream.mapToDouble(Entry::getValue).sum();