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