1Z0-826-JPN 対応
Stream API / Optional難易度 高無料

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

1  import java.util.*;
2  import java.util.stream.*;
3  public class Q4 {
4      public static void main(String[] args) {
5          Optional<Integer> r1 = Stream.<Integer>of().reduce((a, b) -> a + b);
6          System.out.println(r1.isPresent());
7
8          int r2 = Stream.<Integer>of().reduce(0, (a, b) -> a + b);
9          System.out.println(r2);
10     }
11 }
  1. Atrue 改行 0
  2. Bfalse 改行 0
  3. Cfalse の後に例外がスローされる
  4. DNoSuchElementException がスローされる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B✓有資格者監修

解説

reduce には複数のオーバーロードがある。 1引数版 reduce(BinaryOperator) は初期値を持たないため、空ストリームでは「結果なし」を表す 空の Optional を返す(isPresent() は false)。 一方 2引数版 reduce(identity, accumulator) は identity(初期値)を持つため、 空ストリームではそのidentityをそのまま返す。よって r2 は 0。 identity を持つか否かで、空入力時の戻り(Optional か 値そのもの)が分かれるのが要点。
各誤答が違う理由
  • A1引数版は空ストリームで空Optionalを返すので isPresent() は true でなく false。
  • Cどちらの行も例外を投げない。1引数版は空Optionalを返すだけ、2引数版はidentityを返すだけ。
  • Dreduce は空でも例外を投げない(NoSuchElementException は Optional.get() を空に対して呼んだ場合などの話)。
ひっかけ: 「reduceは合計だから空なら0」と一括りにする。identityの有無で戻り型と空入力時挙動が変わる。
実機確認の答え合わせ
出力:
false
0
✓有資格者(著者)による書き下ろし解説

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

この問題集の作り方

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