鉴于嵌套的HashMap HashMap<Integer,HashMap<Integer,BigDecimal>>
,可以将带有并行流的内部HashMap值设置为零,
可接受的副作用并遵守无干扰规则?
例如,给定HashMap:
HashMap<Integer,HashMap<Integer,BigDecimal>> myMap = null;
是每个中的最终for >
myMap.entrySet().parallelStream().forEach(e -> {
e.getValue().entrySet().parallelStream().forEach(e1 -> {
e1.setValue(new BigDecimal(0));
});
});
可接受的副作用并遵守无干扰规则吗?
答案 0 :(得分:0)
...是否可以将并行流的内部HashMap值设置为零...
似乎可行,但是HashMap
不是线程安全的实现,因此我不鼓励您使用这种方式。
...具有可接受的副作用并遵守无干扰规则?
您使用Stream::for
有副作用,因为它更改了Stream的来源。建议您使用Stream::map
,然后再使用一个Map
将结构收集回parrallelStream
:
Map<Integer, Map<Integer,BigDecimal>> myMap2 = myMap.entrySet().parallelStream()
.map(e -> new AbstractMap.SimpleEntry<>(
e.getKey(),
e.getValue().entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, i -> BigDecimal.ZERO))))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));