Lambda表達式簡單入門

1,爲什麼使用Lambda表達式

 Lambda 是一個匿名函數,我們可以把 Lambda表達式理解爲是一段可以傳遞的代碼(將代碼像數據一樣進行傳遞)。可以寫出更簡潔、更靈活的代碼。作爲一種更緊湊的代碼風格,使Java的語言表達能力得到了提升。 

2,Lambda表達式的關鍵:從匿名類到 Lambda 的轉換

首先創建一個Cook接口

package com.xingli.lambdaDemo;

public interface Cook {

    void makeFood();
}

然後看一下從匿名類到 Lambda 的轉換以及lambda的簡化

package com.xingli.lambdaDemo;

/**
 * lambda表達式
 */
public class LambdaDemo {

    public static void main(String[] args) {
        //使用匿名對象
        invokeCoke(new Cook() {
            @Override
            public void makeFood() {
                System.out.println("來喫飯吧");
            }
        });

        //使用lambda表達式
        invokeCoke(()->{
            System.out.println("該喫飯了");
        });
        //lambda省略格式
        invokeCoke(() -> System.out.println("該喫飯了"));
    }


    public static void invokeCoke(Cook cook){
        cook.makeFood();
    }
}

延伸例子

創建Person類

package com.xingli.lambdaDemo;

public class Person {

    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

使用lambda來進行排序

package com.xingli.lambdaDemo;

import java.util.Arrays;
import java.util.Comparator;

/**
 * lambda表達式使用要求
 *   接口必須是函數式接口
 *     關於接口的變動,Java8中新定義了一種接口類型,函數式接口,與其他接口的區別就是:
 *     函數式接口中有且僅有一個抽象方法(我們在這裏不包括與Object的方法重名的方法);
 *     可以有從Object繼承過來的抽象方法,因爲所有類的最終父類都是Object;
 *     接口中唯一抽象方法的命名並不重要,因爲函數式接口就是對某一行爲進行抽象,主要目的就是支持Lambda表達式。
 */

public class LambdaDemo1 {
    public static void main(String[] args) {
        Person[] arr =  {
            new Person("張三",16),
            new Person("李四",26),
            new Person("王五",14)
        };

        //使用匿名對象對用戶按照年齡進行升序拍列
        Arrays.sort(arr, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();
            }
        });
        for (Person person : arr) {
            System.out.println(person);
        }
        //使用lambda表達式對用戶按照年齡降序排列
        Arrays.sort(arr,(Person o1,Person o2) ->{
            return o2.getAge()-o1.getAge();
        });
        for (Person person : arr) {
            System.out.println(person);
        }
        //lambda簡化按照年齡升序排序
        Arrays.sort(arr,(o1,o2) ->o1.getAge()-o2.getAge());
        for (Person person : arr) {
            System.out.println(person);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章