本記事では、『Oracle Certified Java Programmer, Gold SE 11』の出題範囲、『インターフェースとラムダ式』について、黒本の内容を自分なりに解釈し、まとめていきます
対象者としては、以下の方を想定しています
- Java SE11 Goldの試験を受ける予定で、クラスとインターフェースの項目の理解を深めたい方
- Java SE11 Goldの範囲内で、クラスとインターフェースについて、おさらいしたい方
『Java SE8 Gold』の情報が多い中、『Java SE11 Gold』の内容があまり存在しないため、本記事を作成いたしました
また、このような記事を書いているものの、『Java SE11 Gold』取得に向けて勉強している身のため、その点はご容赦ください
BiConsumer
関数型インターフェースのConsumerは、引数を一つしか受け取れないが、『BiConsumer』では引数を二つ受け取ることができる
import java.util.function.BiConsumer;
public class Hoge {
public static void main(String[] args) {
BiConsumer<String, Integer> fuga = (a, b) -> System.out.println(a + b);
fuga.accept("aa", 12);
}
aa12
複数条件を組み合わせた「Predicate」
『Predicate』には、論理演算子「||」に相当する『orメソッド』や、「&&」に相当する『andメソッド』が用意されている
orメソッド
import java.util.function.Predicate;
public class Hoge {
public static void main(String[] args) {
Predicate<String> fuga = f -> f.equals("fuga");
Predicate<String> funga = f -> f.equals("funga");
System.out.println(fuga.or(funga).test("fuga"));
System.out.println(fuga.or(funga).test("funga"));
System.out.println(fuga.or(funga).test("hoge"));
}
true
true
false
andメソッド
import java.util.function.Predicate;
public class Hoge {
public static void main(String[] args) {
Predicate<Integer> fuga = f -> f > 10;
Predicate<Integer> funga = f -> f < 20;
System.out.println(fuga.and(funga).test(1));
System.out.println(fuga.and(funga).test(30));
System.out.println(fuga.and(funga).test(15));
}
false
false
true
BiPredicate
関数型インターフェースのPredicateは、引数を一つしか受け取れないが、『BiPredicate』では引数を二つ受け取ることができる
import java.util.function.BiPredicate;
public class Hoge {
public static void main(String[] args) {
BiPredicate<String, String> fuga = (f, h) -> f.equals(h);
System.out.println(fuga.test("fuga", "fuga"));
System.out.println(fuga.test("fuga", "hoge"));
}
true
false
BiFunction
関数型インターフェースのFunctionは、引数を一つしか受け取れないが、『BiFunction』では引数を二つ受け取ることができる
import java.util.function.BiFunction;
public class Hoge {
public static void main(String[] args) {
BiFunction<Integer, Integer, Boolean> fuga = (f, h) -> f > h;
System.out.println(fuga.apply(10, 15));
System.out.println(fuga.apply(15, 10));
}
false
true
UnaryOperator
関数型インターフェースの『UnaryOperator』は、一つの値を処理して同じ型の結果を戻す処理を定義できる
「Function」との違いは、戻り値の型が引数の型から変更できるかどうか
import java.util.function.BiFunction;
public class Hoge {
public static void main(String[] args) {
UnaryOperator<Integer> fuga = x -> ++x;
System.out.println(fuga.apply(5));
}
6
BinaryOperator
関数型インターフェースの『BinaryOperator』は、二つの値を処理して同じ型の結果を戻す処理を定義できる
「BiFunction」との違いは、引数の型と戻り値の型が全て同じか全て別々かどうか
import java.util.function.BiFunction;
public class Hoge {
public static void main(String[] args) {
BinaryOperator<String> fuga = (f, h) -> f.concat(h);
System.out.println(fuga.apply("fuga, ", "hoge"));
}
fuga, hoge
おわりに
自分のアウトプットも兼ねて、Java SE11 Goldの試験で出題される、関数型インターフェースとラムダ式についてまとめました
間違っている点があった場合は、教えてくださると助かります
他の章についてもまとめていきますので、お待ちいただければと思います