《Java 深入理解 实践篇:Lambda 练习题》
〇 练习题3_1
public class FuncList {
public static boolean isOdd(int x) {
return (x % 2 == 1);
}
public String passCheck(int point, String name) {
return name + "さんは" + (point > 65 ? "合格" : "不合格");
}
}
public interface Func1 { boolean call(int x); }
public interface Func2 { String call(int point, String name); }
public static void main(String[] args) {
FuncList func = new FuncList();
// FuncListクラスに定義した静的メソッドの参照を変数に代入
Func1 f1 = FuncList::isOdd;
// FuncListクラスに定義したメソッドの参照をインスタンス変数を通して代入
Func2 f2 = func::passCheck;
System.out.println(f1.call(15));
System.out.println(f2.call(65, "Test"));
}
练习问题3_2 – 练习三题二
public static void main(String[] args) {
// FuncListの各メソッドをラムダ式で表現
Func1 f1 = x -> x % 2 == 1;
Func2 f2 = (point, name) -> {
return name + "さんは" + (point > 65 ? "合格" : "不合格");
};
System.out.println(f1.call(15));
System.out.println(f2.call(65, "Test"));
}
第三個練習問題3_3
public static void main(String[] args) {
// Func1,2を標準関数インタフェースに変更
// IntPredicate = Int値の引数を評価
IntPredicate isOdd = x -> x % 2 == 1;
// Predicate<xxx> = xxx値の引数を評価
Predicate<Integer> f1 = x -> x % 2 == 1;
// <Integer = 引数1(point), String = 引数2(name) , String = 戻り値>
BiFunction<Integer,String, String> passCheck = (point, name) -> {
return name + "さんは" + (point > 65 ? "合格" : "不合格");
};
// f1とisOddの結果は同じ
System.out.println(f1.test(15));
System.out.println(isOdd.test(15));
System.out.println(passCheck.apply(65, "Test"));
}
练习题三四
public static void main(String[] args) {
// 登場人物を格納
List<String> names = List.of("菅原拓真", "大江岳斗", "朝香あゆみ", "湊雄介");
// フルネームが4文字以下の人にの末尾に「さん」をつける StreamAPIを使う
names.stream()
.filter(name -> name.length() <= 4)
.map(name -> name + "さん")
.forEach(System.out::println);
}