关于java中Lambda表达式的使用(粗解)

时间:2021-07-21 22:11:51

Lambda表达式的使用可以很大程度上减少代码的数量,但是阅读起来并不是怎么方便,如果是长期查看lambda代码可能还好一点!!!使用lambda表达式减少的代码主要是简化匿名内部类使用的代码的数量,Lambda表达式的书写方式:
(参数) -> 表达式
(参数) -> 语句
(参数) -> { 语句 }

结合上面的书写模式下面来看几个例子:

正常的java表达式:

        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.print("Hello Lambda!!\n");
            }
        }).start();

Lambda表达式:

new Thread(()->System.out.print("Hello Lambda!!\n")).start();

正常的java表达式:

filter(languages,new Predicate<String>() {

            @Override
            public boolean test(String t) {
                return true;
            }
        });

        private static void filter(List<String> names, Predicate<String> condition) {
            for(String name: names)  {
                if(condition.test(name)) {
                    System.out.println(name + " ");
                }
            }
        }

Lambda表达式:

        filter(languages, (str)->true); private static void filter(List<String> names, Predicate<String> condition) { for(String name: names) { if(condition.test(name)) { System.out.println(name + " "); } } }

正常的java表达式:

        List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500,600);
        Stream<Double> s = costBeforeTax.stream().map(new Function<Integer, Double>() {

            @Override
            public Double apply(Integer t) {
                return t*1.12;
            }
        });
        Optional<Double> o = s.reduce(new BinaryOperator<Double>() {

            @Override
            public Double apply(Double arg0, Double arg1) {
                // TODO Auto-generated method stub
                System.out.println(arg0+" + "+arg1);
                return arg0+arg1;
            }
        });
        System.out.println("2222222222 Total : " + o.get());

Lambda表达式:

        double d = costBeforeTax.stream().map((cc)->cc*1.12).reduce((x,y)->x+y).get(); System.out.println("1111111111 Total : " + d);

通过对比可以很明显看到,使用lambda表达式可以写出更加简短的代码,但是不是很适合阅读,特别是对于一些不熟悉的方法,比如reduce,如果没有接触到这个方法,仅仅只看这个Lambda表达式根本看不出什么,而且也看不出reduce方法的输入参数类型和返回结果类型!!

个人觉得,在使用任何一种语言或者新的方式编程都是一个熟能生巧的过程,对于Lambda表达式而言,只要你勤加练习,估计你以后在使用到匿名内部类的时候就会自然而然的使用Lambda表达来装逼编写代码了!!

在使用Lambda时,你可能需要对一些接口的回调特别熟悉,不然都不清楚参数的意义,还写个毛线呀,个人觉得你不会Lambda表达式也没有什么关系(难道使用Lambda表达式还可以优化程序执行速度吗?没听有人这么说呀,所以这玩意对我而言纯属装逼用的)!!

关于Lambda表达式就说这么到,有兴趣的朋友可以以关注我,遇到问题大家一起讨论一下!!

相关文章