JAVA基础 -- java8新特性一之 lambda表达式

你可以不知道怎么编写带有lambda表达式的代码,但是你必须能看明白它到底是什么东西,因为目前流行后端框架中都有它的身影。

如果需要使用到lambda表达式,那么必须要了解函数式接口。

      什么是函数式(Functional)接口:一个接口有且仅有一个抽象方法,那么,这个接口,我们把它叫做函数式接口。

 

举例:

    (o1,o2) -> Integer.compare(o1,o2);

       

       左边( (o1,o2) ):lambda形参列表  (其实就是接口中的抽象方法的形参列表)。

       右边( Integer.compare(o1,o2); ):lambda体  (其实就是重写抽象方法的方法体)。

 

Lambda使用(六种情况):

//第一种 无参数,无返回值
    @Test
    public void lambda01() {
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("新建一个初始化线程");
            }
        };
        r1.run();

        System.out.println("*********************************");

        //使用lambda表达式之后
        Runnable r2 = () -> System.out.println("新建一个初始化线程");
        r2.run();
    }
//第二种 有参数,无返回值
    @Test
    public void lambda02() {
        Consumer c1 = new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println("使用消费者" + integer);
            }
        };
        c1.accept(1);

        System.out.println("*********************************");

        //使用lambda表达式之后
        Consumer<Integer> c2 = (Integer integer) -> System.out.println("使用消费者" + integer);
        c2.accept(2);
    }
//第三种 数据类型可以省略,因为可以有编译器推断得出,称为”类型推断“
    @Test
    public void lambda03() {
        Consumer<Integer> c1 = new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println("使用消费者" + integer);
            }
        };
        c1.accept(1);

        System.out.println("*********************************");

        //使用lambda表达式之后
        Consumer<Integer> c2 = (integer) -> System.out.println("使用消费者" + integer);
        c2.accept(2);
    }
//第四种情况 如果参数只要一个的情况下,可以省略参数列表的小括号
    @Test
    public void lambda04() {
        Consumer<Integer> c1 = new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println("使用消费者" + integer);
            }
        };
        c1.accept(1);

        System.out.println("*********************************");

        //使用lambda表达式之后
        Consumer<Integer> c2 = integer -> System.out.println("使用消费者" + integer);
        c2.accept(2);
    }
//第五种情况 需要两个或者以上参数,多条执行语句,并且有返回值
    @Test
    public void lambda05() {
        Comparator<Integer> c1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(o2);
            }
        };
        System.out.println(c1.compare(11,22));

        System.out.println("*********************************");

        //使用lambda表达式之后
        Comparator<Integer> c2 = (o1, o2) -> {
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        };
        System.out.println(c2.compare(11,22));
    }
//第六种情况 当lambda体只有一条语句是,return和方法体的大括号都可以省略
    @Test
    public void lambda06() {
        Comparator<Integer> c1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };
        System.out.println(c1.compare(11,22));

        System.out.println("*********************************");

        //使用lambda表达式之后
        Comparator<Integer> c2 = (o1, o2) -> o1.compareTo(o2);
        System.out.println(c2.compare(11,22));
    }

总结:

      --> 左边: lambda形参列表的参数类型都可以省略(类型推断);如果lambda形参列表只有一个,()可以省略。

      --> 右边:lambda体应该使用{}包裹,如果lambda方法体如果只有一条语句,可以省略return和大括号(注意:要省略必须同时省略。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值