5、メソッドリファレンス
-
メソッドリファレンス:これは、ラムダ式のもう1つの表現です。
-
使用シナリオ:Lambda本体の呼び出しメソッドのパラメーターリストと戻り値タイプが、関数インターフェイスの抽象メソッドのパラメーターリストと戻り値と一致している場合
-
一般的な方法の引用形式:
-
インスタンスメソッドリファレンス:(args)-> expr.method(args);
-
形式:expr :: method
Consumer<String> c= (s)-> System.out.println(s); c.accept("Lambda表达式的基础形式...."); Consumer<String> c2=System.out::println; c2.accept("Lambda表达式的方法引用形式..");
-
-
静的メソッド参照:(args)-> ClassName.method(args);
-
形式:ClassName :: method
Comparator<Integer> c3= (x,y)->Integer.compare(x,y); //基础形式 Comparator<Integer> c4=Integer::compare; //方法引用形式 int r=c4.compare(5,7); System.out.println("5和7的大写比较结果为:"+r);
-
-
特別なケースメソッドリファレンス:(A a、B b)-> A.method(b);
-
フォーマット:A :: method
-
注:Lambdaパラメーターリストの最初のパラメーターがインスタンスメソッドの呼び出し元であり、2番目のパラメーターがインスタンスメソッドのパラメーターである場合、ここでの参照メソッドを適用できます(2つのメソッドの戻り値のタイプは次のとおりです)。同じ)
BiPredicate<String,String> bp = (s1,s2)->s1.equals(s2); BiPredicate<String,String> bp2=String::equals; boolean b=bp2.test("hello","world"); System.out.println("两个字符串的比较结果:"+b);
-
-
工法参考:
-
パラメータなしの構築メソッドへの参照:()-> new Student();
- フォーマット:Student :: new
-
パラメータ化された構築方法への参照:(String s)-> new Student(s);
- フォーマット:Student :: new
-
注:呼び出す必要のあるコンストラクターのパラメーター・リストは、関数型インターフェースの抽象メソッドのパラメーター・リストと一致している必要があり、抽象メソッドの戻り値タイプはオブジェクト・タイプです。
class MyClass{ public MyClass(){ System.out.println("无参数的构造方法..."); } public MyClass(Integer value){ System.out.println("有参数的构造方法...."); } } public class TestMyClass { public static void main(String[] args) { Supplier<MyClass> s3 = MyClass::new; MyClass mc1=s3.get(); Function<Integer,MyClass> s4 = MyClass::new; MyClass mc2=s4.apply(25); } }
-
-