Lambda表达式
在我的理解中,Lambda表达式是类似匿名内部类,比匿名内部类更简洁。是将方法当成一个参数穿递给某个
方法。Lambda表达式格式: 参数列表 -> 执行的代码块
如下例子:
package com.yezi.ds.java8features;
import com.google.common.collect.Lists;
import org.junit.Test;
import java.util.List;
import java.util.function.Supplier;
/**
* @Description : java8 新特性之 Lambda表达式
* @Author : 高冷的美男子
* @Date : Created in 14:35 2018/3/20
*/
public class FeaturesOfLambdaTest {
public List<Integer> list = Lists.newArrayList(1,2,3,4,5,6,7,8,9,10);
/**
* @Description : 1.Lambda 表达式
* @Author : 高冷的美男子
* @Date : Created in 14:36 2018/3/20
*/
@Test
public void testLambda(){
//以前的集合遍历
for (Integer integer:list) {
System.out.println(integer);
}
// -> 左边的是参数 右边是执行的代码块
list.forEach( e -> System.out.println("输出:"+e));
//上面的参数类型是由编译器判断出来的 可以显示声明参数类型
list.forEach((Integer e)->System.out.println("输出"+e));
//如果有多行代码块时 可以用大括号给这些代码括起来
list.forEach(e->{
System.out.println("第一次输出:"+e);
System.out.println("第二次输出:"+e);
});
//lambda表达式可以引用成员变量和局部变量(会将这些变量隐式转换为final的),
//下面两段代码效果相同
String string="哈哈哈哈";
list.forEach(e->System.out.println(e+string));
final String string2="哈哈哈哈哈哈哈哈哈哈哈哈哈";
list.forEach(e->System.out.println(e+string2));
//Lambda表达式有返回值,返回值的类型也由编译器推理得出。如果Lambda表达式中的
// 语句块只有一行,则可以不用使用return语句,下列两个代码片段效果相同:
list.sort( ( e1, e2 ) -> e1.compareTo( e2 ) );
list.sort( ( e1, e2 ) -> {
int result = e1.compareTo( e2 );
return result;
});
}
}
Lambda的设计者们为了让现有的功能与Lambda表达式良好兼容,考虑了很多方法,于是产生了函数接口这个概念。函数接口指的是只有一个函数的接口,这样的接口可以隐式转换为Lambda表达式。
参考博客:
1、https://www.cnblogs.com/xingzc/p/6002873.html