文章16 | 阅读 6549 | 点赞0
lambda 表达式可以算是java8 最大的新特性了, Lambda 表达式其实就是匿名内部类的简单实现方式, 去掉了匿名内部类的模板式代码, 只保留匿名内部类中抽象方法的核心代码, 使代码看起来更简洁. lambda 表达式需要函数式接口支持, 适用于策略设计模式. 此外, java8 增强了类型推断, 可以通过目标方法上下文推断参数类型. 对于同级别局部变量在匿名内部类中使用时,无须再显示声明final, 但底层依旧是final 类型, lambda表达式中不能修改.
java8 引入了一个新的操作符 -> , 称为箭头操作符或Lambda操作符. 箭头将lambda表达式分为左右两部分:
参数列表 -> 方法体
(参数) -> {方法体}
lambda 表达式的参数个数, 方法体语句行数的差异, lambda 表达式提供了相应的简写方式,因此也就产生了多种多样的lambda 表达式格式.
@Test
public void test_1(){
Runnable runnable = () -> System.out.println(LocalDateTime.now());
runnable.run();
}
@Test
public void test_2(){
Consumer<String> consumer = (name) -> System.out.println(name);
consumer.accept("zhangsan");
// 左侧只有一个参数时, 小括号可以不写. 当无参数或多个参数时,都必须写.
Consumer<String> consumer1 = name -> System.out.println(name);
consumer1.accept("lisi");
}
@Test
public void test_3(){
Function<Employee, String> function = (employee -> employee.getName());
Employee emp = new Employee(1001, "zhangsan", "Man", 20);
String name = function.apply(emp);
System.out.println(name);
}
@Test
public void test_4(){
// lambda 体中多条语句时,使用大括号包裹, 使用return 返回值
Comparator<Integer> intCmp = (x, y) -> {
System.out.println("x:" + x + ",y:" + y);
return Integer.compare(x, y);
};
System.out.println(intCmp.compare(3, 5));
// 当lambda 体中只有一条语句时, 大括号和return 都可以省略
Comparator<Double> doubleCmp = (x, y) -> Double.compare(x, y);
System.out.println(doubleCmp.compare(3.0, 5.0));
}
@Test
public void test_5(){
// 完整写法, 不省略大小括号和return
BinaryOperator<Long> biOper = (Long x, Long y) -> {
return x + y;
};
System.out.println("10 + 20 = " + biOper.apply(10l, 20l));
// 省略大括号, 参数类型, return
BinaryOperator<Long> biOper2 = (x, y) -> x + y;
System.out.println("10 + 20 = " + biOper2.apply(10l, 20l));
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://zongf.blog.csdn.net/article/details/90057391
内容来源于网络,如有侵权,请联系作者删除!