Collectors.toMap的mergeFunction参数是否按确定顺序传递?
关于Collectors.toMap合并函数参数顺序的问题解答
- 结论明确:
Collectors.toMap的mergeFunction参数顺序是有保证的——第一个参数是流中先出现的元素,第二个是后出现的元素。 - 适配你的场景:当你通过
Stream.concat(list1.stream(), list2.stream())合并两个列表时,流的遍历顺序严格遵循list1在前、list2在后。遇到重复键时,mergeFunction的第一个参数a必然是list1中的元素,第二个参数b是list2里的重复元素。此时传入(a, b) -> a,完全能实现优先保留第一个列表元素的需求。 - 依据说明:虽然JDK文档没有直接在
mergeFunction的描述里标注参数顺序,但只要源列表是有序集合(比如ArrayList),concat后的流会保持有序性。Collectors.toMap处理有序流时,会严格按照流的遍历顺序传递冲突元素,先出现的元素作为第一个参数传入。
内容的提问来源于stack exchange,提问作者Guerric P
相关产品推荐
相关产品推荐

