lambda表達式簡單使用

一,適用場景:

  • 1,接口有且只有一個抽象方法;
  • 2,方法的入參中有參數爲接口的實例

此時在調用該方法時就可以使用lambda表達式了

二,使用

1,先來個簡單例子

/**
 * @description:
 * @author: kismet
 * @create: 2018-11-30 15:45
 */
public class Test {
    //接口
    public interface MyInterface {
        //1,只能有一個抽象方法
        void method(); //無參數無返回
    }

    /**
     * Title: lambdaMethod Description: 調用lambda接口的方法
     *
     * @param myInterface 接口MyInterface的實例
     * @return
     * @author kismet
     * @date 2018/11/30 16:06
     */
    public static void lambdaMethod(MyInterface myInterface) {//2:有參數爲,接口的實例
        //TODO 業務
        System.out.println("調用接口實現方法前");
        myInterface.method();
        System.out.println("調用接口實現方法後");
        //TODO 業務
    }


    public static void main(String[] args) {

        //java8之前方式
        lambdaMethod(new MyInterface() {
            @Override
            public void method() {
                System.out.println("接口方法實現:無參數");
            }
        });

        //lambda表達式方式
        lambdaMethod(() -> System.out.println("接口方法實現:無參數"));
    }
}

說明:

  • 1,由於爲了直觀顯示,直接將接口定義在類裏面了;
  • 2,運行結果
    調用接口實現方法前
    接口方法實現:無參數
    調用接口實現方法後
    調用接口實現方法前
    接口方法實現:無參數
    調用接口實現方法後

2,再來看看有參數,有返回的

/**
 * @description:
 * @author: kismet
 * @create: 2018-11-30 15:45
 */
public class Test4Param {
    //接口
    public interface MyInterface {
        //1,只能有一個抽象方法
        int method(String str); //有參數,有返回
    }

    /**
     * Title: lambdaMethod Description: 調用lambda接口的方法
     *
     * @param myInterface 接口MyInterface的實例
     * @param str
     * @return
     * @author kismet
     * @date 2018/11/30 16:06
     */
    public static void lambdaMethod(String str, MyInterface myInterface) {//2:有參數爲,接口的實例
        //TODO 業務
        System.out.println("調用接口實現方法前");
        int length = myInterface.method(str);
        System.out.println("字符串的長度爲==>" + length);
        System.out.println("調用接口實現方法後");
        //TODO 業務
    }


    public static void main(String[] args) {
        //java8之前方式
        lambdaMethod("求字符串長度", new MyInterface() {
            @Override
            public int method(String str) {
                return str.length();
            }
        });
        //lambda表達式方式
        lambdaMethod("lambda求字符串長度", x -> x.length());
    }
}

說明:可以看出有無參數或者返回區別在於lambda表達式的書寫形式上;我們來看看lambda的主要幾種書寫形式

    1. 不需要參數,返回值爲 5
      () -> 5
    1. 接收一個參數(數字類型),返回其2倍的值
      x -> 2 * x
    1. 接受2個參數(數字),並返回他們的差值
      (x, y) -> x – y
    1. 接收2個int型整數,返回他們的和(參數類型其實也可以省略)
      (int x, int y) -> x + y
    1. 接受一個 string 對象,並在控制檯打印,不返回任何值(看起來像是返回void)
      (String s) -> System.out.print(s)
    1. 多行時使用{};在返回值前面加上return就行
      () -> {
      int i = 3 + 5;
      return i;
      }

3,lambda雙冒號::的使用

	List<String> strings = new ArrayList<>();

        strings.add("1");
        strings.add("12");
        strings.add("123");

        strings.forEach(System.out::println);//2,表示調用System.out的println方法
        strings.forEach(String::length);//1,表示調用String的length方法

雙冒號XX::yy表示調用XX的的yy方法,如上所示有兩種情況

  • 1>當yy爲無參方法時,表示循環調用集合中每個XX實例的yy()方法;
    如上面代碼中表示循環調用集合中每個String實例的length()方法;
  • 2>當yy爲有參方法時,表示調用XX的有參方法yy(XX,xx);並且參數類型爲XX,這樣就把集合中的每個XX作爲yy方法的入參;
    如上面代碼中表示循環調用System.out的println方法,並且入參爲集合中的每個String實例;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章