Предположим, что у нас есть стандартная цепочка методов операций потока:
Arrays.asList("a", "bc", "def").stream()
.filter(e -> e.length() != 2)
.map(e -> e.length())
.forEach(e -> System.out.println(e));
Существуют ли какие-либо гарантии в JLS относительно порядка, в котором потоковые операции применяются к элементам списка?
Например, гарантируется ли это:
- Применение предиката фильтра к
"bc"
не произойдет, прежде чем применять предикат фильтра к"a"
? - Применение функции сопоставления к
"def"
не произойдет, прежде чем применять функцию сопоставления к"a"
? -
1
будет напечатано до3
?
Примечание. Здесь я говорю конкретно о stream()
, not parallelStream()
, где предполагается, что операции, такие как сопоставление и фильтрация, выполняются параллельно.