Lambda最最最重要口訣:拷貝小括號 , 寫死右箭頭 , 落地大括號
Lambda表達式是給函數式接口的形參或變量賦值用的一段代碼
@FunctionalInterface //隱身修飾,取消可以有多個抽象方法,加上只能有一個
interface Function{
//函數接口裏必須有一個抽象方法
void fun(int x,int y,int z);
//可以有多個default修飾的方法
default int add2(int x,int y){
System.out.println( add3(5,6));
return x + y;
}
//靜態方法只能用於類之間調用,其它類不能調用
static int add3(int x,int y){
return x + y;
}
default void add4(int x){
for (int i = 0; x < 10;x++){
System.out.println("打印;"+x);
}
}
}
/**
* 1.8接口:1.函數接口@FunctionalInterface
* 2.static靜態方法
* 3.default修飾的方法
* 4.表達式
* 拷貝小括號 , 寫死右箭頭 , 落地大括號
*/
class Test {
public static void main(String[] args) {
Function function = (x,y,z) -> {}; //這裏的參數對應抽象方法
System.out.println(function.add2(5,8)); //調用方法
function.add4(3);
Lambda細節操作
import java.util.TreeSet;
class User{
private Integer id;
private Integer age;
private String name;
public User(Integer id, Integer age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
}
/**
* Lambda 表達式是給函數式接口的形參或變量賦值用的(是一段代碼)
* 必須是給這個函數式接口的抽象方法傳代碼複用的
*
* 格式: (形參)->{lambda方法體}
* 形參列表就是函數接口的抽象方法的形參列表
* 方法體就是函數式接口的抽象方法的方法體
*
*/
class Test {
public static void main(String[] args) {
//按照年齡從低到高
TreeSet<User> user = new TreeSet<>((o1, o2) -> Double.compare(o1.getAge(),o2.getAge()));
user.add(new User(1,79,"李元霸"));
user.add(new User(2,23,"李元"));
for(User user1 :user){
System.out.println(user1);
}
}
}
User{id=2, age=23, name='李元'}
User{id=1, age=79, name='李元霸'}
細節說明
1.當(形參)是空參,那麼()是不能省略
2.當(形參)是有參,類型可以確定,形參的數據類型可以省略
3.當(形參)有參,並且只有一個形參,類型和()都可以省略
4.{lambda方法體}有多個語句,每句語句都要;結束
5.{lambda方法體}只有一個語句,{} 和 ; 可以同時省略
6.如果函數接口的抽象方法的返回值類型不是void,那麼{lambda方法體}裏面要有return返回值語句
如果{lambda方法體}中只有一個{return 返回值;}語句時,次時{} ; return關鍵字這三樣都可以同時省略
7.形參名可以根據自己定義