Java8---Lambda表達式

一、概述java

    1.一、Lambda表達式  容許  使用  簡潔的代碼  建立  只有一個抽象方法的接口  的實例ide

@FunctionalInterface
public interface Command {

    void process(int[] array);
}

  

  

public class ProcessArray {

    public void process(Object target,Command command){

    }
}

  

public class LambdaTest {

    public static void main(String[] args) {


        ProcessArray processArray=new ProcessArray();
        int[] array=new int[]{1,2,1,1,1,1};


        /**
         * before Lambda
         */
        processArray.process(new Object(), new Command() {
            @Override
            public void process(int[] intArray) {
                //do something...
            }
        });

        /**
         * after Lambda  參數帶類型
         */
        processArray.process(new Object(),(int[] intArray)->{
            //do something...
        });

        /**
         * after Lambda  參數不帶類型
         */
        processArray.process(new Object(),(intArray)->{
            //do something...
        });

    }

}

    

    1.二、函數式接口函數

        1.2.一、  Lambda表達式的  目標類型   必須是  函數式接口spa

        1.2.二、  函數式接口:  3d

                只包含一個抽象方法接口code

                可包含多個  默認方法、類方法;對象

 

    1.三、方法引用、構造器引用blog

        

 

 

        1.3.一、類方法引用接口

              

@FunctionalInterface
public interface Converter {

    Integer converter(String src);

}

  

public class Test {

    public static void main(String[] args) {
        //Lambda表達式建立對象
        Converter converter=src -> Integer.valueOf(src);
        System.out.println(converter.converter("12"));

        /**
         * 類方法引用
         *      調用Integer的valueOf()  實現  Converter接口中的惟一抽象方法converter();
         *      當調用Converter接口的converter()時,參數  將會 傳給  Integer的valueOf();
         */
        Converter converter1=Integer::valueOf;
        System.out.println(converter1.converter("122"));
        
    }
}

        1.3.二、對象方法引用get

@FunctionalInterface
public interface Converter {

    Integer converter(String src);

}

  

//Lambda表達式建立對象
        Converter converter2=src -> "kit.org".indexOf(src);
        System.out.println(converter2.converter("it"));

        /**
         * 對象方法引用
         *      "kit.org"對象的indexOf()  實現   Converter接口中的惟一抽象方法converter();
         *      當調用Converter接口的converter()時,參數  將會 傳給  "kit.org"對象的indexOf();
         */
        Converter converter3="kit.org"::indexOf;
        System.out.println(converter3.converter("it"));

        1.3.三、類對象的實例方法引用

@FunctionalInterface
public interface MySub {

    String sub(String a,int b,int c);
}

  

public class Test {

    public static void main(String[] args) {

        //Lambda表達式建立對象
        MySub mySub=(a,b,c)->a.substring(b,c);
        System.out.println(mySub.sub("hello",1,2));

        /**
         * 類對象的實例方法引用
         *      String的substring()  做爲  MySub接口的sub()的實現;
         *      當MySub實例調用sub()時,a參數   做爲  String的substring()的調用者;
         *                             b,c參數   做爲   a實例的substring()的參數;
         */
        MySub mySub1=String::substring;
        System.out.println(mySub1.sub("hello",0,2));
    }
}

        1.3.四、構造器 引用

@FunctionalInterface
public interface WinTest {

    JFrame win(String s);
}

 

public class Test {

    public static void main(String[] args) {
        //Lambda表達式建立對象
        WinTest winTest=s -> new JFrame(s);
        System.out.println(winTest.win("hello"));

        /**
         * 構造器引用
         *      JFrame的JFrame(String title)構造器  做爲   WinTest的win()的實現;
         *      當使用WinTest實例的win()時,參數將傳遞給   JFrame的JFrame(String title)構造器;
         */
        WinTest winTest1=JFrame::new;
        System.out.println(winTest1.win("hello111"));
    }
}

  

 

 

二、應用

    2.一、匿名內部類

相關文章
相關標籤/搜索