Java8新特性-Lambda表达式

1.如何学习新特性

  • 角度一:新的语法规则
    自动装箱、自动拆箱、注解、enum、Lambda表达式等

  • 角度二:增加、过时、删除API

    StringBuilder、ArrayList、新的日期时间的API、Optional等

  • 角度三:底层的优化、JVM参数的调整、GC的变化、内存结构的变化等

    注意:初学者一般关注前两个角度即可,第三个角度在项目调优时使用

2.Lambda表达式

(1)小试牛刀

public class LambdaTest1 {
    public static void main(String[] args) {
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("我爱北京天安门");
            }
        };
        r1.run();
        Runnable r2 = () -> {
            System.out.println("我爱上海东方明珠");
        };
        r2.run();
    }
}

注:使用Lambda时匿名内部类可以省略掉类名,且Runnable接口只有一个抽象方法,所以也可以省略掉run方法的声明(确定的都可以删了)

public class LambdaTest2 {
    public static void main(String[] args) {
        System.out.println("普通写法:");
        Comparator<Integer> cp1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);
            }
        };
        int n1 = cp1.compare(23,21);
        System.out.println(n1);
        System.out.println("Lambda表达式:");
        Comparator<Integer> cp2 = (o1,o2) -> Integer.compare(o1,o2);
        int n2 = cp2.compare(21,23);
        System.out.println(n2);
        System.out.println("方法引用:");
        Comparator<Integer> cp3 = Integer :: compare;
        int n3 = cp3.compare(24,13);
        System.out.println(n3);
    }
}

从上可以得可以使用Lambda表达式的条件:接口只有一个抽象方法

(2)Lambda的格式

-> : Lambda操作符或箭头操作符

->左边 : Lambda形参列表,对应要重写的接口中的抽象方法的形参列表

-> 右边:Lambda体,对应要重写的接口中的抽象方法的方法体

形如:Lambda形参列表 -> Lambda体

(3)Lambda的本质

  • 一方面,Lambda作为接口的实现类的对象。
  • 另一方面,Lambda表达式是一个匿名函数

(4)Lambda表达式的语法规则总结

  • -> 的左边,Lambda的形参列表,其类型都可以省略,如果只含一个参数,那么()也可以省略

  • -> 的右边,Lambda体,对应着重写的方法体,如果方法体中只有一行执行语句,那么可以省略{},如果加上有return关键字,必须一并省略

    示例如下:

     Comparator<Integer> cp2 = (o1,o2) -> Integer.compare(o1,o2);
            int n2 = cp2.compare(21,23);
    

3.函数式接口

  • 如果接口中只声明有一个抽象方法,那么就称这个接口为函数式接口
  • 只有给函数式接口提供实现类的对象时,我们才可以使用Lambda表达式
  • 四个基本的函数接口
    • 消费型接口:Consumer void accept(T t)
    • 供给型接口:Supplier T get()
    • 函数型接口:Function<T,R> R apply(T t)
    • 判断型接口:Predicate boolean test(T t)
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值