Для Java 7 нет ничего более того, что вы можете сделать, вы уже делаете это наилучшим образом.
Я добавляю этот ответ в качестве ссылки, чтобы показать, что для такого случая использование Лямбда-выражений в Java 8 будет даже хуже. Смотрите этот пример:
public static void main(String[] args) {
Map<String, String> map1 = new HashMap<>();
final Map<String, String> map2 = new HashMap<>();
for (int i=0; i<100000; i++){
map1.put("k"+i, "v"+i);
map2.put("v"+i, "val"+i);
}
long time;
long prev_time = System.currentTimeMillis();
for (Map.Entry<String, String> entry : map1.entrySet()) {
map1.put(entry.getKey(), map2.get(entry.getValue()));
}
time = System.currentTimeMillis() - prev_time;
System.out.println("Time after for loop " + time);
map1 = new HashMap<>();
for (int i=0; i<100000; i++){
map1.put("k"+i, "v"+i);
}
prev_time = System.currentTimeMillis();
map1.replaceAll((k, v) -> map2.get(v));
time = System.currentTimeMillis() - prev_time;
System.out.println("Time after for loop " + time);
}
Выходной сигнал для этого будет:
Time after for loop 40
Time after for loop 100
Второй цикл является переменной, но всегда больше, чем первый.
Я не специалист Lambda, но я думаю, что есть больше, чтобы быть обработаны с ним, чем простая «Еогеасп» первого сценария
Запуск этот тест, снова и снова вас получит для лямбда почти всегда в два раза больше времени первого случая «foreach».
Не совсем, нет - хотя похоже, что вы должны делать 'map3.put' вместо' map1.put'? –
это java 8? в этом случае потоки могут вам помочь. – njzk2
Кроме того, вы должны делать 'map2.put' вместо' map1.put' при заполнении 'map2'. – Atri