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.一、匿名内部类

相关文章
相关标签/搜索