Метод forEachOrdered
Метод forEachOrdered класса Stream выполняет заданное действие для каждого элемента потока, соблюдая порядок элементов. В отличие от метода forEach, который не гарантирует порядок выполнения в параллельных потоках, forEachOrdered всегда обрабатывает элементы в том порядке, в котором они находятся в исходном потоке. В параметр мы передаем объект типа Consumer, который определяет действие, выполняемое над каждым элементом.
Синтаксис
stream.forEachOrdered(action)
Пример
Давайте выведем каждый элемент потока в консоль, сохраняя порядок:
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream.of("a", "b", "c", "d", "e")
.forEachOrdered(System.out::println);
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
Пример
Давайте применим метод forEachOrdered к параллельному потоку и убедимся, что порядок сохраняется:
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream.of(1, 2, 3, 4, 5)
.parallel()
.forEachOrdered(System.out::println);
}
}
Результат выполнения кода:
1
2
3
4
5
Пример
Давайте выполним действие над каждым элементом потока, собрав результат в список:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
List<String> res = new ArrayList<>();
Stream.of("a", "b", "c", "d", "e")
.forEachOrdered(res::add);
System.out.println(res);
}
}
Результат выполнения кода:
[a, b, c, d, e]