ストリームのさまざまな要素を数えたいのですが、その理由がわかりません
Stream<String> stream = Stream.of("a", "b", "a", "c", "c", "a", "a", "d");
Map<String, Integer> counter1 = stream.collect(Collectors.toMap(s -> s, 1, Integer::sum));
動作しません。エクリプスが教えてくれる
Collectors 型のメソッド toMap(Function, Function, BinaryOperator) は、引数 (( s) -> {}, int, Integer::sum) には適用できません。
ちなみに、私はその解決策について知っています:
Map<String, Long> counter2 = stream.collect(Collectors.groupingBy(s -> s, Collectors.counting()));
だから私は2つの質問があります:
- 私の最初のアプローチの間違いは何ですか?
- そのようなカウンターをどのように実装しますか?
編集:私は自分で最初の質問を解決しました:
Map<String, Integer> counter1 = stream.collect(Collectors.toMap(s -> s, s -> 1, Integer::sum));
Java は、2 番目の引数として関数を期待しています。