在官方文档中,您可以阅读:
UNORDERED
指示集合操作不承诺保留输入元素的遭遇顺序.
没有任何例子,这没有太大帮助.
我的问题是,UNORDERED
特征究竟意味着什么?我应该使用减少收集器,如min或sum,还是只适用于收集器?
在OpenJDK看起来像减少操作(min,sum,avg)具有空特征.我预计至少发现有CONCURRENT
和UNORDERED
.
为什么我要在并行流中使用并发特性和collect:
List<Integer> list =
Collections.synchronizedList(new ArrayList<>(Arrays.asList(1, 2, 4)));
Map<Integer, Integer> collect = list.stream().parallel()
.collect(Collectors.toConcurrentMap(k -> k, v -> v, (c, c2) -> c + c2));
Run Code Online (Sandbox Code Playgroud)
并不是:
Map<Integer, Integer> collect = list.stream().parallel()
.collect(Collectors.toMap(k -> k, v -> v, (c, c2) -> c + c2));
Run Code Online (Sandbox Code Playgroud)
换句话说,不使用此特性会产生什么副作用,它对内部流操作有用吗?
我想将a Map
转换为ConcurrentHashMap
通过Java 8 Stream
和Collector
接口,我可以使用两个选项.
首先:
Map<Integer, String> mb = persons.stream()
.collect(Collectors.toMap(
p -> p.age,
p -> p.name,
(name1, name2) -> name1+";"+name2,
ConcurrentHashMap::new));
Run Code Online (Sandbox Code Playgroud)
第二个:
Map<Integer, String> mb1 = persons.stream()
.collect(Collectors.toConcurrentMap(
p -> p.age,
p -> p.name));
Run Code Online (Sandbox Code Playgroud)
哪一个是更好的选择?我什么时候应该使用每个选项?