我在下面的代码中尝试优化一个嵌套循环,因为我知道嵌套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);
}
我在下面的代码中尝试优化一个嵌套循环,因为我知道嵌套for循环非常昂贵,有人有其他方法可以实现此目的吗?
循环嵌套是否昂贵取决于每个循环执行了多少次迭代,以及每次迭代要完成什么工作-尤其是对于最内部的循环。通常,专注于消除嵌套循环作为提高性能的机制是没有用的,因为简单地以不同方式分配工作的重组通常不会产生重大影响。只有通过重组,您可以安排消除不必要的工作或增加并发性,这样的重组才有意义。
目前尚不清楚这两种选择是否适用于您的情况,但是提高并发性的最佳选择是并行处理列表元素。如果列表中可能包含重复的元素以及其他可能性,那么这是不安全的,但是如果合理,则可以这样编写:
list.parallelStream()
.forEach(map -> {
setFilePathAndOffsetParams(map);
for (Map.Entry<String, String> entry : anotherMap.entrySet()) {
updateKeyOnMap(map, entry.getKey(), entry.getValue());
}
});
请注意,尽管并行化可以改善经过的时间,但它却增加了一些开销,却没有减少总的工作量。因此,它不会缩短总的CPU时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句