Skip to content
閲覧中:
100本ノック

100本ノック

Java Gold試験において、**関数型インターフェース(Functional Interface)**はすべての基盤です。Stream APIや並列処理のコードが読めるかどうかは、ここを完璧に理解しているかにかかっています。

試験で問われる「引数の数」「戻り値の型」「プリミティブ版の名称」を中心に、100のチェックポイントをまとめました。


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

  1. Predicate<T>:引数1つ(T) → 戻り値 boolean
  2. Consumer<T>:引数1つ(T) → 戻り値 void(消費して終わり)
  3. Function<T, R>:引数1つ(T) → 戻り値 R(変換)
  4. Supplier<T>:引数なし → 戻り値 T(提供)
  5. UnaryOperator<T>:引数1つ(T) → 戻り値 T(同型変換。Functionの親戚)
  6. @FunctionalInterface アノテーション:抽象メソッドが1つであることを保証(必須ではない)
  7. 関数型インターフェースは**抽象メソッドが「1つだけ」**(デフォルトメソッドやstaticメソッドは何個あってもOK)
  8. java.lang.Objectpublic メソッド(equals など)を抽象メソッドとして宣言しても、カウントされない
  9. ラムダ式:(引数) -> { 処理 }
  10. ラムダ式の型推論:引数の型は省略可能
  11. 引数が1つの場合、() は省略可能
  12. 処理が1文の場合、{}return; は省略可能
  13. ラムダ式内からアクセスできるローカル変数は final または 実質的 final のみ
  14. メソッド参照:クラス名::メソッド名 または インスタンス::メソッド名
  15. 構築参照:ClassName::new
  16. Predicate.and(Predicate):条件の結合 (&&)
  17. Predicate.or(Predicate):条件の結合 (||)
  18. Predicate.negate():条件の反転 (!)
  19. Function.andThen(Function):処理の連鎖(Aの後B)
  20. Function.compose(Function):処理の連鎖(Bの前A)

    2. 2引数(Bi)シリーズ (21-40)

  21. BiPredicate<T, U>:引数2つ → boolean

  22. BiConsumer<T, U>:引数2つ → void
  23. BiFunction<T, U, R>:引数2つ → R
  24. BinaryOperator<T>:引数2つ(T, T) → 戻り値 T
  25. BinaryOperatorBiFunction<T, T, T> を継承している
  26. BiConsumerMap.forEach((k, v) -> ...) で多用される
  27. BiFunctionMap.replaceAll((k, v) -> ...) で多用される
  28. 2引数版に Supplier は存在しない(引数なしが定義のため)
  29. 3引数以上の標準インターフェースは存在しない(自作が必要)

    3. プリミティブ特化型 (41-70)

試験で最も「差がつく」のはここです。Int, Long, Double の名称を正確に覚えましょう。

  1. IntPredicate, LongPredicate, DoublePredicate
  2. IntConsumer, LongConsumer, DoubleConsumer
  3. IntSupplier, LongSupplier, DoubleSupplier
  4. IntFunction<R>int を受け取り R を返す
  5. ToIntFunction<T>T を受け取り int を返す(ここがひっかけ!)
  6. IntToDoubleFunctionintdouble
  7. IntToLongFunctionintlong
  8. ObjIntConsumer<T>Tint を受け取り void(BiConsumerの変種)
  9. BooleanSupplier:引数なしで boolean を返す(Predicate ではない!)
  10. プリミティブ版を使う理由は「オートボクシング」による性能低下を防ぐため
  11. プリミティブPredicateの抽象メソッド名は test
  12. プリミティブConsumerの抽象メソッド名は accept
  13. プリミティブSupplierの抽象メソッド名は getAsInt, getAsBoolean
  14. プリミティブFunctionの抽象メソッド名は apply, applyAsInt

    4. 応用と試験のひっかけ (71-100)

  15. 抽象メソッドがゼロのインターフェースは関数型ではない(Marker Interface)

  16. 抽象メソッドが2つ以上のインターフェースは関数型ではない
  17. List.removeIf(Predicate)
  18. List.replaceAll(UnaryOperator)
  19. List.sort(Comparator)Comparator も関数型インターフェース
  20. Comparator.comparing(Function)
  21. Comparator.thenComparing(Function)
  22. Optional.ifPresent(Consumer)
  23. Optional.orElseGet(Supplier)
  24. Optional.map(Function)
  25. Optional.filter(Predicate)
  26. ラムダ式の中でチェック例外を投げる場合は try-catch が必須
  27. Function.identity():引数をそのまま返す関数
  28. ラムダ式と匿名クラスの違い:this の意味(ラムダの this は囲んでいるクラスを指す)
  29. メソッド参照 String::toUpperCaseFunction<String, String>
  30. メソッド参照 System.out::printlnConsumer<String>
  31. Comparator.reversed():順序を逆にする
  32. Comparator.nullsFirst(Comparator)
  33. Comparator.nullsLast(Comparator)
  34. Stream.generate(Supplier)
  35. Stream.iterate(T, UnaryOperator)
  36. Stream.allMatch(Predicate)
  37. Stream.collect(Collector)Collector は関数型ではないが内部で Supplier, BiConsumer, BinaryOperator を使う
  38. Iterable.forEach(Consumer)
  39. Map.computeIfAbsent(K, Function)
  40. Map.merge(K, V, BiFunction)
  41. ラムダ式のパラメータ名は、囲んでいるスコープの変数名と重複できない
  42. Predicate.isEqual(Object):staticメソッド
  43. カスタム関数型インターフェースの作成方法
  44. ラムダ式自体はオブジェクトとして扱える

💡 Java Gold 試験対策の「急所」

試験では**「このメソッドの引数に渡せるラムダ式はどれか?」**という形式で、インターフェースの型を特定させる問題が出ます。

特に以下の3つの区別を徹底してください:

  1. **Function<T, R> vs UnaryOperator<T>**: 戻り値が引数と同じ型なら UnaryOperator です。
  2. **IntFunction<R> vs ToIntFunction<T>**: Int が最初に来るか最後に来るかで「引数」か「戻り値」かが決まります。
  3. **Supplier vs Consumer**: 「もらうだけ」か「あげるだけ」か。

まずは 「1. 4大インターフェースの基本 (1-20)」 の具体的なコード例から確認しましょうか?