1Z0-826-JPN 対応
関数型(Function 合成)難易度 標準無料

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

1   import java.util.function.*;
2   public class Q8 {
3       public static void main(String[] a) {
4           Function<Integer,Integer> f = x -> x + 1;
5           Function<Integer,Integer> g = x -> x * 2;
6           System.out.println(f.andThen(g).apply(3));
7           System.out.println(f.compose(g).apply(3));
8       }
9   }
  1. A8 改行 7
  2. B7 改行 8
  3. C8 改行 8
  4. D7 改行 7
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A✓有資格者監修

解説

Function の合成は2方向あり、「どちらを先に適用するか」が逆になる。

f.andThen(g) = 「f を先、その後 g」(and-then=そのあと)。
apply(3) → f(3)=4 → g(4)=8。

f.compose(g) = 「g を先、その後 f」(compose=f∘g の数学的合成順で、引数に近い g が先)。
apply(3) → g(3)=6 → f(6)=7。

覚え方:a.andThen(b) は「a→b(左から右)」、a.compose(b) は「b→a(右から左)」。

各誤答が違う理由
  • BandThen と compose の結果を取り違え。andThen は8、compose は7。
  • Ccompose も「f→g」と誤解。compose は引数側(g)が先で f(6)=7。
  • DandThen も「g→f」と誤解。andThen は f が先で g(4)=8。
ひっかけ: andThen と compose の適用順は真逆。f.andThen(g)=f→g、f.compose(g)=g→f。名前の語感(compose=合成)で順序を取り違えやすい。
実機確認の答え合わせ
出力:
8
7
公式ドキュメント・関連Function.andThen()↗Function.compose()↗
✓有資格者(著者)による書き下ろし解説

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

この問題集の作り方

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