У меня есть вложенный цикл в приведенном ниже коде, который я пытаюсь оптимизировать, поскольку я знаю, что вложенный цикл очень дорог, у кого-то есть другой способ добиться этого?
Дорогое ли гнездо цикла зависит от того, сколько итераций каждого цикла выполняется, и от того, какая работа выполняется в каждой итерации - особенно для самого внутреннего цикла. Бесполезно сосредотачиваться на устранении вложенных циклов в целом как на механизме повышения производительности, поскольку реструктуризация, которая просто распределяет работу по-разному, обычно не оказывает существенного влияния. Такая реорганизация имеет смысл только в том случае, если путем реорганизации вы сможете устранить ненужную работу или увеличить параллелизм.
Неясно, применима ли какая-либо из этих альтернатив к вашему случаю, но лучшим вариантом для улучшения параллелизма будет параллельная обработка элементов списка. Это небезопасно, если список может содержать дублирующиеся элементы, помимо других возможностей, но если это разумно, вы можете написать это так:
list.parallelStream()
.forEach(map -> {
setFilePathAndOffsetParams(map);
for (Map.Entry<String, String> entry : anotherMap.entrySet()) {
updateKeyOnMap(map, entry.getKey(), entry.getValue());
}
});
Обратите внимание, однако, что, хотя распараллеливание может улучшить истекшее время, оно добавляет немного накладных расходов без уменьшения общего объема работы. Следовательно, он не улучшает общее время процессора.