java基础-lamdba-语法

1. 基本语法

1.1. 如果箭头操作符右边只有一行执行语句,可以省略{} 或者有返回值也可以省略return

Comparator<String> com = (x, y) -> x.compareTo(y)

1.2. 箭头操作符左边的参数有两个或两个以上,右边有不止一行执行语句,甚至有返回值

Comparator<String> com = (x, y) -> {
    System.out.println("比较两个String的大小");
    return x.compareTo(y);
}

1.3. 箭头操作符左边的参数只有一个,一对()也可以省略

Consumer<String> con = s -> System.out.println(s);
con.accept("atguigu");

2. 方法的引用

只有当lambda表达式的体只调用一个方法而不做其他操作的时候,才能把lambda重新为方法引用

2.1. object::instanceMethod

向方法传递参数的lambda表达式

Supplier<String> sup = () -> emp.getName();
System.out.println(sup.get());
Supplier<Integer> sup1 = emp::getId;
System.out.println(sup1.get());

2.2. Class::instanceMethod

当需要引用方法的第一个参数是调用者(隐式参数)

并且第二个参数是需要引用方法的第二个参数(或无参数)时:ClassName::methodName

BiPredicate<String, String> pre = (s1, s2) -> s1.equals(s2);
System.out.println("************");
BiPredicate<String, String> pre1 = String::equals;

2.3. Class::staticMethod

所有的参数都传递到静态方法

Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
System.out.println(com.compare(12, 34));

Comparator<Integer> com1 = Integer::compare;
System.out.println(com1.compare(12, 34));

3. 构造器引用

要求函数式接口中的抽象方法的形参列表与具体的构造器的形参列表一致

要求函数式接口中的抽象方法的返回值类型即为构造器所在类的类型

3.1. 无参数构造器

Supplier<Employee> sup = () -> new Employee();
System.out.println(sup.get());
Supplier<Employee> sup1 = Employee::new;
System.out.println(sup1.get());

3.2. 一参数构造器

Function<String, Employee> func = s -> new Employee(s);
Function<String, Employee> func1 = Employee::new;
Employee emp = func1.apply("Tom");
System.out.println(emp);

3.3. 二参数

BiFunction<Integer, String, Employee> bi = (id,name) -> new Employee(id,name);
Employee emp1 = bi.apply(1001, "成吉思汗");
System.out.println(emp1);
BiFunction<Integer, String, Employee> bi1 = Employee :: new;
Employee emp2 = bi.apply(1002, "忽必烈");
System.out.println(emp2); 

4. 数组引用

格式:类型[] :: new

Function<Integer, String[]> func = num -> new String[num];
String[] strs = func.apply(10);
System.out.println(strs.length);
System.out.println("***********************");
Function<Integer, String[]> func1 = String[]::new;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值