JAVA8知识点概览

行为参数化(Lambda 以及方法引用)

Java 8通过借鉴函数式编程,提供了一种新的方式——通过向方法传递代码片段来解决这一问题。这种新的方法非常方便地提供了两种变体。

  • 传递一个Lambda表达式,即一段精简的代码片段,比如
apple -> apple.getWeight() > 150
  • 传递一个方法引用,该方法引用指向了一个现有的方法,比如这样的代码:
Apple::isHeavy

这些值具有类似 Function<T, R> 、 Predicate<T> 或者 BiFunction<T, U, R> 这样的类型,值的接收方可以通过 apply 、 test 或其他类似的方法执行这些方法。Lambda表达式自身是一个相当酷炫的概念,不过Java 8对它们的使用方式——将它们与全新的Stream API相结合,最终把它们推向了新一代Java的核心。

如果你有一个数据量庞大的集合,你需要对这个集合应用三个操作,比如对这个集合中的对象进行映射,对其中的两个字段进行求和,这之后依据某种条件过滤出满足条件的和,最后对结果进行排序,即为得到结果你需要分三次遍历集合。Stream API则与之相反,它采用延迟算法将这些操作组成一个流水线,通过单次流遍历,一次性完成所有的操作。对于大型的数据集,这种操作方式要高效得多。

CompletableFuture

Java从Java 5版本就提供了 Future 接口。 Future 对于充分利用多核处理能力是非常有益的,因为它允许一个任务在一个新的核上生成一个新的子线程,新生成的任务可以和原来的任务同时运行。原来的任务需要结果时,它可以通过 get 方法等待 Future 运行结束(生成其计算的结果值)。

  • 通过 Stream 你可以对一系列的操作进行流水线,通过 map 、 filter 或者其他类似的方法提供行为参数化,它可有效避免使用迭代器时总是出现模板代码。
  • 类似地, CompletableFuture 提供了像 thenCompose 、 thenCombine 、 allOf 这样的操作,对 Future 涉及的通用设计模式提供了函数式编程的细粒度控制,有助于避免使用命令式编程的模板代码。

Optional

Java 8的库提供了 Optional<T> 类,这个类允许你在代码中指定哪一个变量的值既可能是类型 T 的值,也可能是由静态方法 Optional.empty 表示的缺失值。无论是对于理解程序逻辑,抑或是对于编写产品文档而言,这都是一个重大的好消息,你现在可以通过一种数据类型表示显式缺失的值——使用空指针的问题在于你无法确切了解出现空指针的原因,它是预期的情况,还是说由于之前的某一次计算出错导致的一个偶然性的空值,有了 Optional 之后你就不需要再使用之前容易出错的空指针来表示缺失的值了。

默认方法

Java 8中增加了不少新特性,但是它们一般都不对个体程序的行为带来影响。不过,有一件事情是例外,那就是新增的默认方法。接口中新引入的默认方法对类库的设计者而言简直是如鱼得水。Java 8之前,接口主要用于定义方法签名,现在它们还能为接口的使用者提供方法的默认实现,如果接口的设计者认为接口中声明的某个方法并不需要每一个接口的用户显式地提供实现,他就可以考虑在接口的方法声明中为其定义默认方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值