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

posted @ 2021-09-02 13:42  二十三年蝉、  阅读(287)  评论(0)    收藏  举报