Skip to content
閲覧中:
3. プリミティブ特化型 (41-70)

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

プリミティブ特化型のインターフェースは、Java Gold試験において**「最もひっかけ問題が作りやすい」**鬼門です。 通常、List<Integer> などを使うと「オートボクシング(int ↔ Integer の変換)」が発生し、大量のデータを扱う際に動作が重くなります。それを避けるために用意されたのが、これらのプリミティブ(int, long, double, boolean)専用のインターフェースです。

41番から70番まで、全項目を整理して解説します。


41-43. 基本のプリミティブ版 (Predicate, Consumer, Supplier)

これらは非常にシンプルです。型名の前に Int, Long, Double が付きます。

Java
// 41. IntPredicate: intを受け取り、booleanを返す
IntPredicate isPositive = n -> n > 0;

// 42. DoubleConsumer: doubleを受け取り、void(消費)
DoubleConsumer printDouble = d -> System.out.println(d);

// 43. IntSupplier: 引数なし、intを返す
IntSupplier dice = () -> (int)(Math.random() * 6) + 1;
// 注意:抽象メソッド名は getAsInt() です(get() ではない)
int val = dice.getAsInt(); 

44-47. Functionの「方向」に注意 (重要!)

試験で最も狙われるのが、**「引数がプリミティブなのか、戻り値がプリミティブなのか」**の区別です。

  • XxxFunction<R>: 引数がプリミティブ Xxx、戻り値が参照型 R
  • ToXxxFunction<T>: 引数が参照型 T、戻り値がプリミティブ Xxx
Java
// 44. IntFunction<R>: intを受け取って R(String) を返す
IntFunction<String> itos = i -> "Value is " + i;

// 45. ToIntFunction<T>: T(String) を受け取って int を返す
ToIntFunction<String> stoi = s -> s.length();

// 46-47. プリミティブ間の変換
IntToDoubleFunction iToD = i -> i * 1.0; // int -> double
IntToLongFunction iToL = i -> (long)i;    // int -> long

48-49. 特殊なバリエーション

  • **48. ObjXxxConsumer<T>**: BiConsumer の変種です。一つはオブジェクト、もう一つはプリミティブを受け取ります。
  • **49. BooleanSupplier**: 引数なしで boolean を返します。
Java
// 48. ObjIntConsumer<T>: オブジェクト(T)とintを受け取る
ObjIntConsumer<List<String>> listAdder = (list, i) -> list.add(String.valueOf(i));

// 49. BooleanSupplier: () -> boolean
BooleanSupplier coinFlip = () -> Math.random() > 0.5;
// 抽象メソッド名は getAsBoolean()

51-54. 抽象メソッド名のまとめ

プリミティブ版は、メソッド名に AsXxx が付くことが多いです。

インターフェース 抽象メソッド名
IntPredicate test(int value) (変わらず)
IntConsumer accept(int value) (変わらず)
IntSupplier getAsInt()
IntFunction apply(int value)
ToIntFunction applyAsInt(T value)
IntUnaryOperator applyAsInt(int operand)

50, 55-70. プリミティブUnary/BinaryOperatorと特徴

Java
// 55. IntUnaryOperator: intを受け取りintを返す
IntUnaryOperator doubleIt = n -> n * 2;

// 56. IntBinaryOperator: intを2つ受け取りintを返す
IntBinaryOperator sum = (a, b) -> a + b;

💡 Java Gold 試験対策の「ひっかけ」徹底攻略

  1. Predicate にプリミティブ版の戻り値名はない: IntPredicate のメソッドは getAsBoolean() ではなく、普通の test() です。混乱しやすいので注意。
  2. LongFunction<Double>ToDoubleFunction<Long> の違い:
  3. 前者は long を引数に取ります(apply(long))。
  4. 後者は Long(オブジェクト)を引数に取ります(applyAsDouble(Long))。

  5. Stream のメソッドとの対応:

  6. Stream<Integer>.mapToInt(i -> i) に渡すのは ToIntFunction です。
  7. IntStream.mapToObj(i -> "ID:" + i) に渡すのは IntFunction です。

これでプリミティブ特化型の全容が見えました。

次は、これらを実際の ListMap のメソッド、さらには Optional でどう使いこなすかという 「4. 応用と試験のひっかけ (71-100)」 に進みますか?それとも、プリミティブ版の名称当てクイズを数問やってみますか?

なお、各種アプリのすべての機能を使用するには、Gemini アプリ アクティビティを有効にする必要があります。