15

ストリームのさまざまな要素を数えたいのですが、その理由がわかりません

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つの質問があります:

  1. 私の最初のアプローチの間違いは何ですか?
  2. そのようなカウンターをどのように実装しますか?

編集:私は自分で最初の質問を解決しました:

Map<String, Integer> counter1 = stream.collect(Collectors.toMap(s -> s, s -> 1, Integer::sum)); 

Java は、2 番目の引数として関数を期待しています。

4

3 に答える 3