関数型(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 }- A
8改行7 - B
7改行8 - C
8改行8 - D
7改行7
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A✓Gold監修
解説
Function の合成は2方向あり、「どちらを先に適用するか」が逆になる。
f.andThen(g) = 「f を先、その後 g」(and-then=そのあと)。
apply(3) → f(3)=4 → g(4)=8。
f.compose(g) = 「g を先、その後 f」(compose=g∘f の数学的合成順で、引数に近い 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
✓Gold 保有者による書き下ろし解説・実機で検証済