- 流管道剖析
– JDK 中的流来源
– 中间流操作
中间操作负责将一个流转换为另一个流,中间操作包括 filter()(选择与条件匹配的元素)、map()(根据函数来转换元素)、distinct()(删除重复)、limit()(在特定大小处截断流)和 sorted()。一些操作(比如 mapToInt())获取一种类型的流并返回一种不同类型的流。
– 终止流操作
数据集的处理在执行终止操作时开始,比如缩减(sum() 或 max())、应用 (forEach()) 或搜索 (findFirst()) 操作。终止操作会生成一个结果或副作用。执行终止操作时,会终止流管道,如果您想再次遍历同一个数据集,可以设置一个新的流管道 - 函数式编程
- 函数的无副作用
函数的副作用指的是函数在调用的过程中,除了给出返回值外,还修改了函数外部的状态。
函数是编程认为:函数的副作用应该尽量被避免 - 函数式编程的基础
2.1 FunctionalInterface 注解:
a. FunctionalInterface 用于表明接口是一个函数式接口
b. 该接口 被定义为只包含一个抽象方法(任何被java.lang.Object 实现的方法都不能被视为抽象方法)
- 函数的无副作用
@FunctionalInterface
public interface ErrorFunctionInterface {
boolean equals(Object obj); // 错误接函数式接口申明, equals 在Object中有实现。
}
@FunctionalInterface
public interface ErrorFunctionInterface {
//boolean equals(Object obj);
void handle(); // 有且只能有一个抽象方法
void handle2();
}
2.2 接口默认方法
java8 中, 使用default 关键字,可以在接口内部定义具有特定逻辑的实例方法。
public interface IDonkey {
void eat();
default void run(){
System.out.println("Donkey run");
}
}
2.3 lambda 表达式
lambda 表达式即匿名函数,没有函数名的函数体。lambda 表达式可以访问外部的局部变量,但是必须声明为final,才能保证在lambda 表达式中合法的访问它。
2.4 方法引用
- 深入理解 java8 stream 流
-
Java8 Stream原理深度解析
深入理解Java Stream流水线