1
我想在同一個流上使用兩次加入收集器來產生像這樣的字符串Tea:5 - Coffee:3 - Money:10
。加入兩次相同的流
飲料是具有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);
此代碼不會在相同的流水線做這兩種操作。它創建**兩個**流('groupByDrink.entrySet().stream()')併合並結果。 – Alexey
@Alexey:我從來沒有聲稱過這一點,並且這個問題中沒有任何暗示這是希望的。所有這些解決方案都使用單一的「加入」收集器來處理所有結果,這似乎是,問題的關鍵。至少,它談到了'加入'收藏家...... – Holger
也許我沒有看到OP想要做什麼。我認爲他/他很不高興,因爲一個流是從'groupByDrink'地圖中兩次播放的,並且他/她想要一次完成。 – Alexey