Lambda表达式的简单使用
1.Lambda表达式的作用
将函数作为参数传递进方法中
2.优缺点
优点:少量的代码就能替代以前的一大堆循环判断过滤等,代码简洁。
缺点:
(1)用Lambda充当匿名内部类、方法引用等场合效率低。
(2)Lambda的特点还在于开发成本高,并且异常难以排查。它的异常堆栈比匿名内部类还要难懂。如果你把stream的操作都写在同一行,则问题更甚。
(3)代码维护性差。
3.写法
Lambda表达式由三部分组成
(1)形参,单个或多个,多个由逗号分隔,参数是函数式接口里面方法的参数
(2)->
(3)方法体,可以是表达式或者代码块,代码块必须由{}围绕,注意需要return的情况
注意:
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值
4.使用场景
(1)替代匿名内部类
void innerClass(){ Thread t1 = new Thread(new Runnable() { @Override public void run() { System.out.println("不用lambda"); } }); Thread t2= new Thread(()-> System.out.println("使用lambda")); t1.run(); t2.run(); }
(2)以流的方式处理数据
void stream(){ Integer[] arr=new Integer[]{1,2,3,5,32,6,2,45,265}; List<Integer> list= Arrays.asList(arr); //过滤出偶数列表 List<Integer> filterList=list.stream().filter(i -> i % 2 == 0).collect(Collectors.toList()); System.out.println(filterList.toString()); //转成平方列表 List<Integer> squareList=list.stream().map(i->i*i).collect(Collectors.toList()); System.out.println(squareList.toString()); }
(3)以内部迭代取代外部迭代
void iteration(){ String[] arr=new String[]{"wang","test","hello","baga","good"}; List<String> list1=Arrays.asList(arr); for (String i:list1) { System.out.print(i+" "); } System.out.println(); List<String> list2=Arrays.asList(arr); //内部迭代 list2.stream().forEach(n-> System.out.print(n+" ")); }
over
参考:https://blog.csdn.net/lcgoing/article/details/87886599

浙公网安备 33010602011771号