Что работает потенциально быстрее: for или forEach?
for (Object item : items) { ... }
// VS
items.forEach(item -> { ... });
Логика мне подсказывает, что между ними нет разницы (вообще). Интуитивно кажется, что если кто-то и будет быстрее, то for.
Попробовал запустить такой тест:
public class TestApplication {
  public static void main(final String[] args) {
    final List<String> items = new ArrayList<>();
    for (int i = 0; i < 10000000; i++) {
      items.add(String.format("Item #%d", i));
    }
    final AtomicInteger payload = new AtomicInteger();
    // test 1
    long testStart = System.currentTimeMillis();
    for (final String item : items) {
      payload.addAndGet(1);
    }
    long testStop = System.currentTimeMillis();
    System.out.println(String.format("Test 1 (for):     %d", testStop - testStart));
    // test 2
    testStart = System.currentTimeMillis();
    items.forEach(item -> {
      payload.addAndGet(1);
    });
    testStop = System.currentTimeMillis();
    System.out.println(String.format("Test 2 (forEach): %d", testStop - testStart));
    // test 3
    testStart = System.currentTimeMillis();
    for (final String item : items) {
      payload.addAndGet(1);
    }
    testStop = System.currentTimeMillis();
    System.out.println(String.format("Test 3 (for):     %d", testStop - testStart));
    // test 4
    testStart = System.currentTimeMillis();
    items.forEach(item -> {
      payload.addAndGet(1);
    });
    testStop = System.currentTimeMillis();
    System.out.println(String.format("Test 4 (forEach): %d", testStop - testStart));
  }
}
Результат:
Test 1 (for):     171
Test 2 (forEach): 162
Test 3 (for):     162
Test 4 (forEach): 145
(вывод по результатам нескольких запусков: forEach, как правило, работает быстрее for на ~ несколько миллисекунд)
Если убрать payload (запустить пустые циклы), то результат примерно такой (forEach опять быстрее):
Test 1 (for):     76
Test 2 (forEach): 73
Test 3 (for):     78
Test 4 (forEach): 70
Если заменить ArrayList на HashSet, то результаты примерно одинаковые (то for быстрее то forEach):
Test 1 (for):     431
Test 2 (forEach): 421
Test 3 (for):     368
Test 4 (forEach): 386




