文章标题

RxJava学习之旅(一)

函数接口与lambda表达式

博主是Android小鲜肉一枚,最近在研究学习备受Adroid关注的Rx系列知识,想把学习过程和各位大神一起交流探讨。

一、函数接口

Java8新引入的概念。它的定义是:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。接口函数要重定义方法才能被调用,调用函数可理解为已经重写方法的接口函数。
lambda正是在这种基础上的一种表达式,它大大简化了我们代码的书写。

二、lambda表达式

Lambda表达式是Java SE 8中一个重要的新特性,所以使用lambda必须先安装JDK8啦。lambda表达式允许你通过表达式来代替功能接口,基本语法:
(parameters) -> expression

(parameters) ->{ statements; }
例:(int x, int y) -> x + y //接收两个参数,返回他们的值
(String s) -> System.out.print(s) //接收一个字符串并在控制台打印
看到这个有没有觉得很熟悉?记得在JNI中的C语言编写中就是这种语法
老版本Java中是排列字符串的

List<String> names = Arrays.asList("a", "b", "c", "d");
Collections.sort(names, new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return b.compareTo(a);
    }
});

只需要给 Collections.sort 传入一个List对象以及一个比较器来按指定顺序排列。通常我们都是创建一个匿名的比较器对象然后将其传递给sort方法。
在Java 8 中你就没必要使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式:

Collections.sort(names, (String a, String b) -> {
    return b.compareTo(a);
});

代码变得更段且更具有可读性,但是实际上还可以写得更短:

Collections.sort(names, (String a, String b) -> b.compareTo(a));

对于函数体只有一行代码的,你可以去掉大括号{}以及return关键字,但是你还可以写得更短点:
代码如下:

Collections.sort(names, (a, b) -> b.compareTo(a));

Java编译器可以自动推导出参数类型,所以你可以不用再写一次类型。
Lambda表达式是如何在java的类型系统中表示的呢?每一个lambda表达式都对应一个类型,通常是接口类型。而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为 默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。
今天就到这里啦,未完待后续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值