在处理并行流时,它们之间是有区别的。
toMap->是非并行收集器
toConcurrentMap->是并发收集器(这可以从它们的特征中看出)。
区别在于 toMap 将创建多个中间结果,然后将其合并在一起(多次调用该Collector的Supplier),而 toConcurrentMap
将创建 单个 结果,并且每个Thread都会向其抛出结果(此类的Supplier收藏家只会被调用一次)
为什么这很重要?这处理插入顺序(如果有的话)。
toMap 将通过合并多个中间结果按遇到的顺序在结果Map中插入值(该收集器的供应商称为“多次”,也称为“合并器”)
toConcurrentMap
将通过将所有元素扔到公共结果容器(在这种情况下为ConcurrentHashMap)来以任何顺序(未定义)收集元素。供应商仅被调用一次,累加器被调用多次,而合并器则从未被调用。
这里的一个小警告是
CONCURRENT收集器不调用合并:流必须具有
UNORDERED标志-
通过
unordered()显式调用或当流的源未排序时(
Set例如)。



