Lambada表达式的用法

Lambada表达式是JDK1.8中最重要的新功能之一。使用Lambada表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类。代码看起来更简洁易懂。Lambada表达式同时还提升了对集合、框架的迭代、遍历、过滤数据操作。

特点:函数式编程、参数类型自动推断,代码量少、简洁

先小试牛刀,新建一个线程和一个集合的排序的两种写法

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("thread is running");
    }
}).start();
new Thread(()->{
    System.out.println("thread is running");
}).start();
List<String> stringList1 = Arrays.asList("a","abc","ab");
Collections.sort(stringList1, new Comparator<String>(){
    @Override
    public int compare(String o1, String o2) {
        return o1.length() - o2.length();
    }
});
System.out.println(stringList1);
List<String> stringList2 = Arrays.asList("a","abc","ab");
Collections.sort(stringList2,(a,b)-> a.length() - b.length());
System.out.println(stringList2);

学好Lambada表达式的诀窍:1.熟悉泛型 2.正常的开发多练,多用Stream API。只要是任何有函数式接口的地方都可以用Lambada(只有一个抽象方法的接口就是函数式接口)

  只要JDK接口上面有@FunctionalInterface注解的接口都是函数式接口。

  更多的可以查看jdk java.util.function包下面的接口,该包下面的接口都是函数式接口。

  介绍几个比较常用的  Supplier 代表一个输出,Consumer 代表一个输入,Function代表一个输入一个输出(输入和输出类型不相同,也可以相同)。BiConsumer代表两个输入。UnaryOperator 代表一个输入一个输出(输入和输出类型相同)。BiFunction代表两个输入一个输出。BinaryOperator代表两个输入一个输出(输入输出类型相同)---这些基本的函数式接口应当熟练牢记,其余的接口都是在此基础上扩展的比如DoubleConsumer代表输入的是一个Double类型的。

那么Lambada的语法 : LambadaParameters -> LambadaBody

 args -> expr或者(Object...args)->{函数式接口的抽象方法实现逻辑},()里面参数的个数,是根据函数式接口里面抽象方法的参数个数来决定的,当只有一个参数的时候()可以省略,当expr逻辑非常简单的时候{}和return可以省略

比如:()->{}无参,无返回值

           ()->{System.out.println(1);}无参,无返回值

           ()->System.out.println(1);无参,无返回值

           ()->{return 100};无参,有返回值

           ()->return 100;无参,有返回值

           ()->100;无参,有返回值

           ()->null;无参,有返回值

           x->x+1有参,有返回值

Lambada虽然可以做参数推断,但是当有多个入参的时候不可以有的写参数类型有的不写参数类型,另外参数类型不能用final来修饰。不能把Lambad表达式赋给一个非函数式接口。不需要也不容许使用throws语句来声明它可能会排除的异常

更多的语法见Lambad官方文档 https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值