【发布时间】:2017-12-22 12:09:15
【问题描述】:
我正在使用流将字符串数组转换为哈希图。
String[] arguments= new String[]{"-a","1","-b","2","-c","3","-d","4","-e","5"};
HashMap<String, String> params = new HashMap<>();
IntStream.iterate(0, i -> i + 2)
.limit(arguments.length / 2)
.parallel()
.forEach(i -> params.put(arguments[i], arguments[i + 1]));
System.out.println(params.size());
它显示 5,但有时显示 4。
请您解释一下,导致不同结果的原因是什么?
【问题讨论】:
-
"我正在将字符串数组转换为 hashmap 使用流" 为什么?使用普通的
for循环。它更快、更简单、更清晰,而且有效! -
第 1 步:学习在没有
forEach的情况下解决问题。第 2 步:认识到并行流不会为这样一个微不足道的任务带来回报(尤其是对于并行不友好的iterate(…).limit(…)组合而言)。如果您想要一个高效的解决方案,您可以使用可以并行工作的HashMap<String, String> params = IntStream.range(0, arguments.length/2).map(i -> i*2) .collect(HashMap::new, (m,i) -> m.put(arguments[i], arguments[i+1]), Map::putAll);,但这里的并行处理仍然没有任何好处。
标签: java arrays string hashmap java-stream