Java ...嵌套用于循环优化

Kyl*_*yle 1 java java-8

我在下面的代码中有一个嵌套循环,我正在尝试优化,因为我知道嵌套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)

Joh*_*ger 5

我在下面的代码中有一个嵌套循环,我正在尝试优化,因为我知道嵌套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时间.