AI作成・AIで再検証済(有資格者監修なし)1Z0-826-JPN 対応
Collectors(groupingBy + counting)難易度 標準無料

次のコードの出力として正しいものを選べ。

1  import java.util.*;
2  import java.util.stream.*;
3  public class Q5 {
4      public static void main(String[] a) {
5          Map<Character, Long> m = Stream
6              .of("apple", "banana", "avocado", "cherry", "blueberry")
7              .collect(Collectors.groupingBy(
8                  s -> s.charAt(0),
9                  Collectors.counting()));
10         System.out.println(m);
11     }
12 }
  1. A{a=2, b=2, c=1}
  2. B{a=[apple, avocado], b=[banana, blueberry], c=[cherry]}
  3. C{a=2, b=2, c=1} だが値の型は Integer
  4. D{5=1, 6=2, 7=1, 9=1}(文字列長で分類される)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・AIで再検証済

解説

Collectors.groupingBy(classifier, downstream) は、分類関数(classifier)でキーを決め、同じキーの要素群に対して下流コレクタ(downstream)を適用する。

分類キーは「先頭文字」s.charAt(0)。下流は Collectors.counting()(件数を Long で数える)。

  • 'a' … apple, avocado → 2
  • 'b' … banana, blueberry → 2
  • 'c' … cherry → 1

結果は {a=2, b=2, c=1}。groupingBy の戻りは既定で HashMap で、 これら1文字('a'=97, 'b'=98, 'c'=99)はバケット位置が昇順に並ぶため表示も a, b, c の順になる。

各誤答が違う理由
  • B下流に counting() を指定しているので値は件数。リストになるのは下流を省略した groupingBy(classifier) の場合。
  • Ccounting() の戻りは Long。マップは Map<Character, Long> で、値は Integer ではない(表示は同じ 2/1 でも型が違う)。
  • D分類関数は s.charAt(0)(先頭文字)であり文字列長ではない。長さでの分類は s.length() を渡した場合。
ひっかけ: counting() の戻り型は Long(Integer ではない)。また groupingBy の既定マップは HashMapで反復順は本来保証されないが、単一小文字キーではハッシュ=文字コードのため実質アルファベット順に見える(順序を保証したい場合は groupingBy(fn, TreeMap::new, downstream))。
実機確認の答え合わせ
出力:
{a=2, b=2, c=1}
公式ドキュメント・関連Collectors.groupingBy(SE17 API)↗
AIが作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

有資格者(著者)が監修した問題は、すべて無料サンプルとして公開しています。買う前に、その全部を実際に解いて解説まで読めます。有料で追加される問題はAIが作成したもので、有資格者の監修は入っていません。

この問題集の作り方

  1. 問題と解説はAIが作成しています。有資格者(著者)が監修した問題は、無料サンプルとして公開している分だけです。有料で追加される問題に監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 解説に載せているコンパイル結果は、実際に javac を走らせた出力です。想定した挙動ではありません。
  5. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  6. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
Collectors を含む問題を分野別に演習できます。
演習する →