Говоря о Stream
s, когда я выполняю этот фрагмент кода
public class Main {
public static void main(String[] args) {
Stream.of(1,2,3,4,5,6,7,8,9)
.peek(x->System.out.print("\nA"+x))
.limit(3)
.peek(x->System.out.print("B"+x))
.forEach(x->System.out.print("C"+x));
}
}
Я получаю этот вывод
A1B1C1
A2B2C2
A3B3C3
потому что ограничение моего потока на первые три компонента заставляет действия A, B и C выполняться только три раза.
Попытка выполнить аналогичное вычисление по последним трем элементам с помощью метода skip()
показывает другое поведение: this
public class Main {
public static void main(String[] args) {
Stream.of(1,2,3,4,5,6,7,8,9)
.peek(x->System.out.print("\nA"+x))
.skip(6)
.peek(x->System.out.print("B"+x))
.forEach(x->System.out.print("C"+x));
}
}
выводит этот
A1
A2
A3
A4
A5
A6
A7B7C7
A8B8C8
A9B9C9
Почему в этом случае выполняются действия от A1 до A6? Это должно иметь какое-то отношение к тому, что предел является короткой замыкающей промежуточной операцией состояния, в то время как пропустить нет, но я не понимаю практические последствия этого свойства. Это просто, что "каждое действие перед пропуском выполняется, пока не все до предела"?