示例:
public static void main(String[] args) {
List<String> arr = new ArrayList<>(Arrays.asList("1","2","3","4"));
List<Integer> intArr = arr.stream().distinct()
.map(x->
Integer.parseInt(x)
).collect(Collectors.toList());
}
查看源码过程前建议先看看其他一些关于Stream流的一些帖子,了解Stream流。
1.distinct():创建了中间(延迟执行)有状态(不需要自己处理)操作链即statefulOp链

创建了一条statefulOp对象链

2.map():方法创建了一个中间有状态(有自己处理方法:见示例的“x-> Integer.parseInt(x) ” )操作链 ReferencePipeline.StatelessOp
3.collect():最终操作。
代码调用的过程ReferencePipeline.collect() -> evaluate()->ForEachOps.ForEachOp.evaluateSequential()-> AbstractPipeline.wrapAndCopyInto()->copyInto()

begin 是开始方法,并获取sink对象

foreachRemaining 会调用ArrayList的foreachRemaining()方法并执行accept()。

4.accept()的执行。
distinct方法

map方法

map方法自己的处理方法

进入下一层循环。

最后执行end方法
5.返回结果
返回结果