我在下面的代码中有一个嵌套循环,我正在尝试优化,因为我知道嵌套for循环是非常昂贵的,任何人都有不同的方法来实现这一点?
提前致谢!
private List<Map<String, Object>> updateSomething(List<Map<String, Object>> list)
throws MetadataException {
for (Map<String, Object> map : list) {
setFilePathAndOffsetParams(map);
for (Map.Entry<String, String> entry : anotherMap.entrySet()) {
updateKeyOnMap(map, entry.getKey(), entry.getValue());
}
}
return list;
}
private void updateKeyOnMap(Map<String, Object> map, String newKey, String oldKey) {
if (!newKey.equals(oldKey)) {
map.put(newKey, map.get(oldKey));
map.remove(oldKey);
}
Run Code Online (Sandbox Code Playgroud)
我在下面的代码中有一个嵌套循环,我正在尝试优化,因为我知道嵌套for循环是非常昂贵的,任何人都有不同的方法来实现这一点?
循环嵌套是否昂贵取决于每个循环执行的迭代次数,以及每次迭代中完成的工作 - 尤其是对于最内层循环.将焦点集中在消除嵌套循环作为提高性能的机制是没有用的,因为简单地以不同方式分配工作的重组通常不会产生重大影响.只有通过重组,你可以安排消除不必要的工作或增加并发性,这样的重组才有意义.
目前还不清楚这些替代方案中的任何一个是否适用于您的情况,但是提高并发性的最佳选择是并行处理列表元素.如果列表可能包含重复元素以及其他可能性,这是不安全的,但如果它是合理的,那么您可以这样写:
list.parallelStream()
.forEach(map -> {
setFilePathAndOffsetParams(map);
for (Map.Entry<String, String> entry : anotherMap.entrySet()) {
updateKeyOnMap(map, entry.getKey(), entry.getValue());
}
});
Run Code Online (Sandbox Code Playgroud)
注意哦,但是,而并行化可以提高逝去的时间,它增加了一些开销,而不会降低工作总量.因此,它不会改善聚合CPU时间.
| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |