Skip to content
閲覧中:
1. 4大インターフェースの基本 (1-20)

1. 4大インターフェースの基本 (1-20)

「4大インターフェース」は、Javaの標準ライブラリ(特にStream API)で最も頻繁に使用されるパーツです。これらを完璧に理解することは、Java Gold試験の合格に直結します。

1番から20番までの項目を、コード例とともに詳しく解説します。


1-5. 4大(+1)インターフェースの型と役割

ここがすべての基礎です。「何を受け取り、何を返すか」を暗記してください。

項目 インターフェース 抽象メソッド 引数 戻り値 主な用途
1 Predicate test(T t) 1 boolean 条件判定(filterなど)
2 Consumer accept(T t) | 1 |void` 処理の実行(forEachなど)
3 Function apply(T t) | 1 |R` 型の変換(mapなど)
4 Supplier get() 0 T 値の生成(generateなど)
5 UnaryOperator apply(T t) 1 T 同型変換(replaceAllなど)

6-8. 定義のルール

  • **6. @FunctionalInterface**: これを付けると、メソッドが2つ以上ある場合にコンパイルエラーにしてくれます。
  • 7. 抽象メソッドは1つだけ: ただし、defaultメソッドやstaticメソッドは複数あってもOKです。
  • 8. Objectクラスのメソッド: public boolean equals(Object obj) などを抽象メソッドとして定義しても、「1つ」にはカウントされません。

9-12. ラムダ式の書き方(省略ルール)

試験では、どの省略が正しくてどれが不正かを見極める必要があります。

Java
// 9, 10. 型推論(Stringを省略)
Predicate<String> p1 = (s) -> s.isEmpty();

// 11. 引数が1つの場合は () を省略可能
Predicate<String> p2 = s -> s.isEmpty();

// 12. 1文なら {} と return と ; を省略可能
Function<Integer, Integer> f1 = n -> n * 2; 

// 失敗例:{} を使うなら return と ; が必須
// Function<Integer, Integer> f2 = n -> { n * 2 }; // コンパイルエラー

13. 変数のスコープ(実質的final)

ラムダ式の外にある変数(ローカル変数)を中で使う場合、その変数は変更してはいけません。

Java
int num = 10;
Consumer<Integer> c = (n) -> System.out.println(n + num);
// num = 20; // ここで変更すると、上のラムダ式でコンパイルエラーになる

14-15. メソッド参照

ラムダ式をさらに短く書く方法です。

Java
// 14. メソッド参照
Consumer<String> printer = System.out::println; // (s) -> System.out.println(s) と同じ

// 15. 構築参照(コンストラクタ)
Supplier<List<String>> listGen = ArrayList::new; // () -> new ArrayList<>() と同じ

16-20. デフォルトメソッド(条件の結合と連鎖)

インターフェース自体が持っている、便利な組み合わせ機能です。

Java
Predicate<String> startA = s -> s.startsWith("A");
Predicate<String> endZ = s -> s.endsWith("Z");

// 16, 17, 18. Predicateの結合
Predicate<String> combined = startA.and(endZ); // Aで始まり、かつZで終わる
Predicate<String> or = startA.or(endZ);       // Aで始まる、またはZで終わる
Predicate<String> notA = startA.negate();     // Aで始まらない

// 19, 20. Functionの連鎖
Function<String, Integer> length = s -> s.length();
Function<Integer, String> result = n -> "結果: " + n;

// andThen: Aの後にBを実行
Function<String, String> fAndThen = length.andThen(result); // "Apple" -> 5 -> "結果: 5"

// compose: Bの前にAを実行(中身を先に評価)
Function<String, String> fCompose = result.compose(length); // 同じく "結果: 5"

💡 Java Gold 試験対策のポイント

試験では、「戻り値があるはずなのに voidConsumer を使っていないか?」**や、Predicate なのに boolean 以外を返していないか?」**といった、型の不一致を突く問題が多く出ます。

この「4大インターフェース」の型をマスターすれば、Stream APIの問題の半分は解けたも同然です!

次は、引数が2つになる 「2. 2引数(Bi)シリーズ (21-40)」 に進みますか?それともこの範囲の練習問題を出しましょうか?