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.形参名可以根据自己定义