首页 > 技术文章 > 简介

forerver-elf 2017-06-13 10:36 原文

  Java8提供了一个新的API:Stream。Streams是Java8表示有序数据并能灵活的表示这些数据是否可以并行处理的新方式。流是一系列数据项,一次只生成一项。Stream API的很多方法可以链接起来形成一个复杂的流水线。Java8可以透明的把输入不相关的部分拿到几个CPU内核上去分别执行你的Stream操作流水线。Java8添加的另一个编程概念是通过API来传递代码的能力,即将你的代码作为参数传递给另一个方法的能力,我们把这一概念成为行为参数化。Java8中的Stream API在处理集合时,提供了很多库方法,如根据标准筛选数据,提取数据和给数据分组。这类操作通常可以并行化,如在两个CPU上筛选列表,可以让一个CPU处理列表的前一半,第二个CPU处理后一半,这些称为分支步骤。CPU随后对各自的半个列表进行筛选。最后一个CPU会把两个结果并起来。因此筛选一个Collection的最快方法通常时将其转换成Stream,进行并行处理,然后再转换回List。

  List<Apple> heavyApples = inventory.stream().filter((Apple a) -> a.getWeight() > 150).collect(toList());  //顺序

  List<Apple> heavyApples = inventory.parallelStream().filter((Apple a) -> a.getWeight() > 150).collect(toList());  //并行

  没有共享的可变数据和将方法和函数即代码传递给其他方法是函数式编程范式的基石。

  Java8采用::来达到方法引用的目的。

  File[] hiddenFiles = new File(".").listFiles(File::isHidden); //isHidden();

  Java中加入了默认方法主要是为了支持库设计师,让他们能够写出更容易改进的接口。在接口中提供了默认方法而不是有实现类提供。默认方法由default表示。

  Java8中有个Optional<T>类,能避免出现NullPointer异常。它是一个容器对象,可以包含也可以不包含一个值。Optional<T>中有方法可以明确处理值不存在的情况。

  函数式语言倾向于允许switch用在更多的数据类型上,包括允许模式匹配。模式匹配的优点是编译器可以报告常见错误。

推荐阅读