8

StreamEx ライブラリは、Java 8 ストリームを簡潔に記述するのに本当に役立つようです。特に、マップを検討する場合 (mapKeyValueたとえば、マップ エントリを手動でアンボックスする代わりに を使用します)。

マップにエントリのストリームがある場合、バニラ Java 8 では次のように値を合計できます。

someMap.entrySet().stream()
    .mapToDouble(Entry::getValue)
    .sum()

StreamExでもこれを行うことができますが、StreamExでそれを行うより良い方法を期待していましたが、私が思いつく最善の方法は次のとおりです。

EntryStream.of(someMap)
    .values()
    .mapToDouble(d -> d)
    .sum();

これは良くありません。

私が行方不明になっているより良い方法はありますか?

4

1 に答える 1

8

の値のみに関心があるため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();
于 2016-02-22T16:01:54.527 に答える