示例:
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.返回结果
返回结果