Хотя он forEach
короче и выглядит красивее, я предлагаю использовать его forEachOrdered
в любом месте, где важен порядок, чтобы явно указать это. Для последовательных потоков, forEach
похоже, соблюдается порядок и даже используется внутренний код API потока forEach
(для потока, который, как известно, является последовательным), где это семантически необходимо использовать forEachOrdered
! Тем не менее, позже вы можете решить изменить свой поток на параллельный, и ваш код будет сломан. Также, когда вы используете forEachOrdered
программу для чтения вашего кода, вы увидите сообщение: «Здесь важен порядок». Таким образом он лучше документирует ваш код.
Также обратите внимание, что для параллельных потоков он forEach
не только выполняется в недетерминистическом порядке, но вы также можете выполнять его одновременно в разных потоках для разных элементов (что невозможно с forEachOrdered
).
Наконец, оба forEach
/ forEachOrdered
редко полезны. В большинстве случаев вам действительно нужно получить какой-то результат, а не только побочный эффект, поэтому операции типа reduce
или collect
должны быть более подходящими. Выражение естественного сокращения с помощью forEach
обычно считается плохим стилем.