По определению не существует «промежуточного» времени для шагов. Заданная вами цепочка методов определяет только шаги, которые нужно выполнить (методы создают внутреннюю структуру, содержащую эти шаги).
После вызова оператора терминала все шаги выполняются в неопределенном порядке. Если вы никогда не вызываете оператора терминала, никакие шаги также не выполняются.
Что я имею в виду под неопределенным порядком, это:
intstream.peek(operation1).peek(operation2).sum();
Вы не знаете, вызывается ли operation1
,затем вызывается operation2
, затем снова operation1
, или если operation1
вызывается несколько раз, то operation2
несколько раз или еще что-то еще. (Надеюсь, я прав, говоря это. [Править] правильно ) Вероятно, реализация виртуальной машины требует компромисса со временем и сложностью.
Лучшее, что вы можетеЭто измерение времени, которое занимает каждая операция, поскольку вы имеете полный контроль над каждой операцией. Трудно измерить время, которое занимает двигатель потока. Однако знайте, что когда вы делаете это, вы нарушаете требование потокового API о том, что операции не должны иметь побочных эффектов. Так что не используйте его в производственном коде.