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