Как мне суммировать двойные значения потока карты в 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();
Другие вопросы по тегам