lambda表达式

lambda表达式是在jdk1.8后新增的,所以使用lambda表达式程序编译需要基于1.8版本;使用lambda表达式是因为对程序员来说起名比较困难,程序员只需要关新的业务逻辑,不关心名称,所以lambda表达式一般用于实现匿名内部类或接口,语法()->{}

代码示例

    @Test
    public void test02() {
        /**
         * 原来使用内部类作为参数传递
         */
        TreeSet<String> ts01 = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return Integer.compare(o1.length(), o2.length());
            }
        });
        String s1 = "abc";
        String s2 = "fghg";
        ts01.add(s1);
        ts01.add(s2);
        for (String t : ts01) {
            System.out.println(t);
        }

        /**
         * lambda表达式1
         */
        TreeSet<String> ts02 = new TreeSet<>((x, y) -> {
            return Integer.compare(x.length(), y.length());
        });
        ts02.add(s1);
        ts02.add(s2);
        for (String t : ts02) {
            System.out.println(t);
        }
        /**
         * lambda表达式2
         */
        TreeSet<String> ts03 = new TreeSet<>((x, y) ->
                Integer.compare(x.length(), y.length())
        );

        ts03.add(s1);
        ts03.add(s2);
        for (String t : ts03) {
            System.out.println(t);
        }
    }

1.语法一,无参数,无返回值

 public void test04() {
        //传统的方式,创建匿名内部类启动线程
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("anonymous inner class...");
            }
        };

        //使用lambda表达式
        Runnable r2 = () -> System.out.println("Lambda ...");
        //调用了run方法,不是启动线程
        r1.run();
        r2.run();
    }

2.语法二:有一个参数,无返回值(只有一个参数可以去掉小括号)

    @Test
    public void test05() {
        //原先使用匿名内部类调用MyLambda接口的sayHello
        MyLambda myLambda01 = new MyLambda() {
            @Override
            public void sayHello(String str) {
                System.out.println("hello anonymous innner class ..." + str);
            }
        };

        //使用lambda表达式
        MyLambda myLambda02 = (x) -> System.out.println("hello Lambda " + x);

        myLambda01.sayHello("Tom");
        myLambda02.sayHello("Jim");
    }

    @FunctionalInterface
    interface MyLambda {
        void sayHello(String str);
    }

3.语法三:有两个以上的参数,有返回值,并且Lambda表达式有多条语句(需要使用花括号括起来)

    @Test
    public void test06() {
        Comparator<Integer> comparator01 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println("anoyous inner class out");
                return Integer.compare(o1, o2);
            }
        };

        //Lambda表达式
        Comparator<Integer> comparator02 = (x, y) -> {
            System.out.println("Lambda out");
            return Integer.compare(x, y);
        };

        //测试
        System.out.println(comparator01.compare(123, 44));
        System.out.println(comparator02.compare(123, 44));
    }

4.语法四:Lambda体中只有一个语句,return和大括号都可以不写

    @Test
    public void test07() {
        Comparator<Integer> comparator01 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1, o2);
            }
        };

        //Lambda表达式
        Comparator<Integer> comparator02 = (x, y) ->
                Integer.compare(x, y);


        //测试
        System.out.println(comparator01.compare(123, 44));
        System.out.println(comparator02.compare(123, 44));
    }

5.语法五:lambda表达式的参数列表的数据类型可以省略不写,因为jvm编译器可以通过上下文推断出

   @Test
    public void test08() {

        Comparator<Integer> comparator01 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1, o2);
            }
        };

        //Lambda表达式
        Comparator<Integer> comparator02 = (x, y) ->
                Integer.compare(x, y);

        //Lambda表达式
        Comparator<Integer> comparator03 = (Integer x, Integer y) ->
                Integer.compare(x, y);
        Comparator<Integer> comparator04 = Integer::compare;

        //测试
        System.out.println(comparator01.compare(123, 44));
        System.out.println(comparator02.compare(123, 44));
    }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值