JDK8.0関連機能-メソッドリファレンス(2)

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);
        
            }
        }
        

おすすめ

転載: blog.csdn.net/Java_lover_zpark/article/details/90042047