@Nonnull AggregateOperation3<? super T, ? super T1, ? super T2, ?, R> aggrOp ) { return aggregate3(stage1, stage2, aggrOp, TimestampedItem::fromWindowResult);
AggregateOperation3<T, T1, T2, ?, Tuple3<R0, R1, R2>> aggrOp = aggregateOperation3(aggrOp0, aggrOp1, aggrOp2, Tuple3::tuple3); return aggregate3(stage1, stage2, aggrOp, (start, end, t3) -> new TimestampedItem<>(end, t3));
@Nonnull WindowResult3Function<? super R0, ? super R1, ? super R2, ? extends OUT> mapToOutputFn ) { return aggregate3(stage1, stage2, aggregateOperation3(aggrOp0, aggrOp1, aggrOp2, Tuple3::tuple3), (start, end, t3) -> mapToOutputFn.apply(start, end, t3.f0(), t3.f1(), t3.f2()));