1
同じストリームで結合コレクタを2回使用して、Tea:5 - Coffee:3 - Money:10
のような文字列を生成したいと思います。同じストリームを2回結合する
飲み物はBigdecimal属性(価格)で列挙型です。
現在、私はこのように行わ:
Map<Drink, Long> groupByDrink = listOfDrinks.stream().collect(groupingBy(identity(),counting()));
String acc = groupByDrink.entrySet().stream().map(ite -> join(":", ite.getKey().code(), ite.getValue().toString())).collect(joining(" - "));
acc += " - Money:" + groupByDrink.entrySet().stream().map(ite -> ite.getKey().price().multiply(valueOf(ite.getValue()))).reduce(ZERO, BigDecimal::add);
このコードでは、両方の操作を同じパイプラインで行うわけではありません。 ** 2つの**ストリーム( 'groupByDrink.entrySet()。stream()')を作成し、その結果を結合します。 – Alexey
@Alexey:私はそれを主張したことは一度もなく、これが望んでいることを示唆する質問には何もありません。このソリューションはすべて、すべての結果に対して単一の「参加」コレクターを使用しています。これは、その質問の内容です。少なくとも、「参加する」コレクターについて話しています... – Holger
多分、私はOPが何を望んでいるのかと思っていませんでした。私はストリームが 'groupByDrink'マップから2回cteatedされていることに不満があると思っていました。そして、彼は一度にそれをやりたいと思っていました。 – Alexey