public static <A> void addSideEffect(final TraversalStrategies traversalStrategies, final String key, final A value, final BinaryOperator<A> reducer) { SideEffectStrategy strategy = (SideEffectStrategy) traversalStrategies.toList().stream().filter(s -> s instanceof SideEffectStrategy).findAny().orElse(null); if (null == strategy) { strategy = new SideEffectStrategy(); traversalStrategies.addStrategies(strategy); } else { final SideEffectStrategy cloneStrategy = new SideEffectStrategy(); cloneStrategy.sideEffects.addAll(strategy.sideEffects); strategy = cloneStrategy; traversalStrategies.addStrategies(strategy); } strategy.sideEffects.add(new Triplet<>(key, null == value ? null : value instanceof Supplier ? (Supplier) value : new ConstantSupplier<>(value), reducer)); } }
public <X> Triplet<A,B,X> setAt2(final X value) { return new Triplet<A,B,X>( this.val0, this.val1, value); }
public Triplet<B,C,D> removeFrom0() { return new Triplet<B,C,D>( this.val1, this.val2, this.val3); }
public Triplet<A,B,D> removeFrom2() { return new Triplet<A,B,D>( this.val0, this.val1, this.val3); }
public <X0,X1> Triplet<A,X0,X1> addAt1(final X0 value0, final X1 value1) { return new Triplet<A,X0,X1>( this.val0, value0, value1); }
public Triplet<B,C,D> removeFrom0() { return new Triplet<B,C,D>( this.val1, this.val2, this.val3); }
public Triplet<A,C,D> removeFrom1() { return new Triplet<A,C,D>( this.val0, this.val2, this.val3); }
public Triplet<A,B,D> removeFrom2() { return new Triplet<A,B,D>( this.val0, this.val1, this.val3); }
public <X0> Triplet<X0,A,B> addAt0(final X0 value0) { return new Triplet<X0,A,B>( value0, this.val0, this.val1); }
public <X0> Triplet<A,B,X0> addAt2(final X0 value0) { return new Triplet<A,B,X0>( this.val0, this.val1, value0); }
public Triplet<A,C,D> removeFrom1() { return new Triplet<A,C,D>( this.val0, this.val2, this.val3); }
public <X0> Triplet<A,B,X0> addAt2(final X0 value0) { return new Triplet<A,B,X0>( this.val0, this.val1, value0); }
public <X> Triplet<A,X,C> setAt1(final X value) { return new Triplet<A,X,C>( this.val0, value, this.val2); }
public <X> Triplet<X,B,C> setAt0(final X value) { return new Triplet<X,B,C>( value, this.val1, this.val2); }
public <X0> Triplet<A,X0,B> addAt1(final X0 value0) { return new Triplet<A,X0,B>( this.val0, value0, this.val1); }
public <X0,X1> Triplet<X0,X1,A> addAt0(final X0 value0, final X1 value1) { return new Triplet<X0,X1,A>( value0, value1, this.val0); }
public <X> Triplet<A,X,C> setAt1(final X value) { return new Triplet<A,X,C>( this.val0, value, this.val2); }
public Triplet<A,B,C> removeFrom3() { return new Triplet<A,B,C>( this.val0, this.val1, this.val2); }
public <X0,X1> Triplet<X0,X1,A> addAt0(final X0 value0, final X1 value1) { return new Triplet<X0,X1,A>( value0, value1, this.val0); }
public Triplet<A,B,C> removeFrom3() { return new Triplet<A,B,C>( this.val0, this.val1, this.val2); }