做好充分的准备对于 Java 流非常重要,因为这是面试官最常问的话题。
无论你是刚入职,还是有 3 年经验,还是有 11 年经验,这都是所有公司最热衷的话题。
流上有两种类型的操作
1. 终结操作
2. 中间操作
请记住,流是一种管道,如果仅应用中间操作,则不会产生任何结果。
仅当应用终结操作时,流才会产生结果。
比如:
中间操作:filter()
, map()
, flatMap()
, distinct()
, sorted()
, peek()
, limit()
, skip()
;
终结操作:forEach()
, collect()
, reduce()
, count()
, min()
, max()
, anyMatch()
, allMatch()
, noneMatch()
, findFirst()
, findAny()。
最重要的问题是告知每个流方法的参数类型。
流可以应用于:
Collections:List
, Set
, Map
, etc
Arrays:任何类型的数组 int[],string[]
I/O:文件类 Files.lines()
Generators:Stream.generate()
或Stream.iterate()
。
首先了解一下 Java 中的功能接口是什么?
功能接口:
函数式接口是只包含一个抽象方法的接口。这些接口可以使用 lambda 表达式、方法引用或匿名类来实例化。函数式接口是 Java 支持函数式编程的关键部分,尤其是自 Java 8 引入 Stream API 和 lambda 表达式以来。
@FunctionalInterface
interface MyFunctionalInterface {
void doSomething(String input);
}
流中的 foreach 方法内部使用的功能接口是什么?
答案是消费者功能接口,它接受参数但不返回任何内容。
Java 流:
Java 流有两种类型
并行流
顺序流
并行流:
Java 流提供了一种处理元素序列的强大方法,而并行流则允许您同时对这些元素执行操作,从而充分利用多个 CPU 核心
并行流将源数据分成多个部分,并使用多个线程并行处理每个部分。这可以提高大型数据集的性能,尤其是对于 CPU 密集型操作。
并行流中使用的方法
forEach、map、filter、collect、reduce、flatMap
forEach:
Map:
Filter:
Collect:
Reduce:
FlatMap:
顺序流:
在 Java 中,顺序流是流处理的默认类型,其中元素按照它们在源中出现的顺序一次处理一个。顺序流使用简单,适用于许多场景,尤其是当数据集较小或操作不占用大量 CPU 时。
顺序流的特点:
1.单线程
2. 保持处理顺序
3. 简单易懂
顺序流上的操作:
- 过滤:使用
filter
基于条件的方法选择元素。 - 映射:使用
map
方法对元素进行变换。 - 收集:使用该
collect
方法将结果收集到一个集合中。 - 减少:使用
reduce
方法来汇总结果