AI作成・AIで再検証済(有資格者監修なし)1Z0-826-JPN 対応
Stream(flatMap 平坦化)難易度 標準無料

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

1  import java.util.*;
2  import java.util.stream.*;
3  public class Q4 {
4      public static void main(String[] a) {
5          List<List<Integer>> data =
6              List.of(List.of(1, 2), List.of(3), List.of(4, 5, 6));
7          int sum = data.stream()
8                        .flatMap(List::stream)
9                        .mapToInt(Integer::intValue)
10                       .sum();
11         System.out.println(sum);
12     }
13 }
  1. A21
  2. B3
  3. C6
  4. Dコンパイルエラー(flatMap に List::stream を渡せない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・AIで再検証済

解説

map は「1要素→1要素」の変換だが、flatMap は「1要素→0個以上の要素のストリーム」に展開し、それらを1本のストリームへ平坦化(flatten)する。

data は List<List<Integer>>。flatMap(List::stream) により各内側リストが要素ストリームに開かれ、 全体が 1, 2, 3, 4, 5, 6 という単一の Stream<Integer> になる。 mapToInt(Integer::intValue) で IntStream にし、sum() で合計 → 21。

各誤答が違う理由
  • B内側リストの個数(3)を数えた誤り。flatMap は各リストを要素に展開するので、合計されるのは全整数(1〜6)。
  • C要素の総数(6個)を答えた誤り。求めているのは要素の合計値(1+2+3+4+5+6=21)。
  • DflatMap は「要素→Stream」の関数を取り、List::stream(List<Integer>→Stream<Integer>)は適合する。コンパイルは通る。
ひっかけ: flatMap の関数は「要素→Stream」を返す必要がある(List::stream のように)。ここで map(List::stream) と書くと Stream<Stream<Integer>>(入れ子のまま)になり平坦化されない。
実機確認の答え合わせ
出力:
21
公式ドキュメント・関連Stream.flatMap(SE17 API)↗
AIが作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

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

この問題集の作り方

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