一、简介
lambda表达式是Java8的一个重要特性,也可以称为闭包,常用于配合Java8的Stream对集合元素进行操作,使得代码更简介紧凑。
二、代码解析
虽说lambda表达式是一个新的特性,但是使用起来还是需要注意的,在对于引用对象来操作时,用lambda表达式可以使代码更简介,不过对于基本数据类型进行操作时,有时代码量反而会增大一些,这点见仁见智了,下面通过代码来学习下:
/** * 测试类 */ public class Test { public static void main(String[] args) { /*场景一:给每个元素+1*/ Integer arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; List<Integer> list = Arrays.asList(arr); //不用lambda for (int i = 0; i < list.size(); i++) { list.set(i, list.get(i) + 1); } System.out.println("不用lambda:" + list.toString()); //使用lambda【配合Stream来获取下标进行元素操作】 Stream.iterate(0, i -> i + 1).limit(list.size()).forEach(i -> { list.set(i, list.get(i) + 1); }); System.out.println("使用lambda:" + list.toString()); } }
配合上面的代码来看,若直接操作基本数据类型的集合,使用lambda代码量相对会多一些,日常开发中,大多数场景会用来操作对象的集合,下面看一下使用lambda表达式操作对象的集合是什么样的场景:
/** * 测试类 */ public class Test { @Autowired private IUserInfoService iUserInfoService; /*场景二:获取每个对象*/ public void test() { List<UserInfoVO> userList = iUserInfoService.queryList(); //不使用lambda for (UserInfoVO vo : userList) { System.out.println(vo.toString()); } //使用lambda userList.forEach(vo -> { System.out.println(vo.toString());//箭头前的vo实际就代指userList内的每一个UserInfoVO对象 }); } }
其实比较起来,传统写法与lambda表达式写法代码量差不多,结构表达也各有优势,lambda表达式主要是为了引出Java的函数式编程思想【类似于JavaScript的编写方式】,实际运用中以自己习惯的编码方式书写即可。