Java笔记之Java8新特性

2019-01-20  本文已影响0人  码匠

本笔记来自 计算机程序的思维逻辑 系列文章

Lambda表达式

Lambda表达式

语法

匿名函数,由 -> 分隔为两部分

变量引用

与匿名内部类类似,Lambda表达式也可以访问定义在主体代码外部的变量,但对于局部变量,它也只能访问final类型的变量,与匿名内部类的区别是,它不要求变量声明为final,但变量事实上不能被重新赋值

对比

Java会为每个匿名内部类生成一个类,但Lambda表达式不会

函数式接口

函数式接口也是接口,但只能有一个抽象方法,使用@FunctionalInterface注解声明

Lambda表达式可以赋值给函数式接口

预定义的函数式接口

方法引用

Lambda表达式的一种简写方法,由 :: 分隔为两部分,前面是类名或变量名,后面是方法名

方法可以是静态方法,也可以是实例方法

函数的复合

函数式接口和Lambda表达式还可作方法的返回值,传递代码回调用者,构造复合的函数

接口的静态方法和默认方法

在Java8之前,接口中的方法都是抽象方法,没有实现体

在Java8允许在接口中定义两类新方法:静态方法默认方法

引入默认方法主要是函数式数据处理的需求,为了便于给接口增加功能

函数式数据处理

Stream

Java8引入一套新的类库,位于包java.util.stream下,称之为Stream API

该接口类似一个迭代器,提供了丰富的操作

特点

方法

构建流

Collection

Java8给Collection接口增加了两个默认方法,使其返回Stream

Arrays

Java8新增几个方法,返回Stream

Stream

Collector

定义

public interface Collector<T, A, R> {
    Supplier<A> supplier();
    BiConsumer<A, T> accumulator();
    BinaryOperator<A> combiner();
    Function<A, R> finisher();
    Set<Characteristics> characteristics();
}

实现原理

通过调用该接口的方法,组合成最终需要的结果

Collectors

容器收集器

字符串收集器

分组

组合式异步编程

可以方便地将多个有一定依赖关系的异步任务以流水线的方式组合在一起

简洁自然地表达多个异步任务之间的依赖关系和执行流程

CompletionStage

表示任务的阶段,多个CompletionStage可以以流水线的方式组合起来

其提供了大量方法,可以方便地响应任务事件,构建任务流水线,实现组合式异步编程

CompletableFuture

实现了FutureCompletionStage接口

定义

接受 SupplierRunnable ,不接受 Callable

新特性

响应结果和异常

构建依赖的任务流

依赖单一阶段的任务流
依赖两个阶段的任务流
依赖多个阶段的任务流

任务的执行

一般有3类方法

上一篇下一篇

猜你喜欢

热点阅读