class BavetBiGroupBridgeUniConstraintStream<Solution_, A, NewA, NewB>
        extends BavetAbstractUniConstraintStream<Solution_, A> {

    private final BavetAbstractUniConstraintStream<Solution_, A> parent;
    private BavetGroupBiConstraintStream<Solution_, NewA, NewB> groupStream;
    private final GroupNodeConstructor<BiTuple<NewA, NewB>> nodeConstructor;

    public BavetBiGroupBridgeUniConstraintStream(BavetConstraintFactory<Solution_> constraintFactory,
            BavetAbstractUniConstraintStream<Solution_, A> parent,
            GroupNodeConstructor<BiTuple<NewA, NewB>> nodeConstructor) {
        super(constraintFactory, parent.getRetrievalSemantics());
        this.parent = parent;
        this.nodeConstructor = nodeConstructor;
    }

    @Override
    public boolean guaranteesDistinct() {
        return true;
    }

    public void setGroupStream(BavetGroupBiConstraintStream<Solution_, NewA, NewB> groupStream) {
        this.groupStream = groupStream;
    }

    // ************************************************************************
    // Node creation
    // ************************************************************************

    @Override
    public void collectActiveConstraintStreams(Set<BavetAbstractConstraintStream<Solution_>> constraintStreamSet) {
        parent.collectActiveConstraintStreams(constraintStreamSet);
        constraintStreamSet.add(this);
    }

    @Override
    public <Score_ extends Score<Score_>> void buildNode(NodeBuildHelper<Score_> buildHelper) {<FILL_FUNCTION_BODY>}

    @Override
    public BavetAbstractConstraintStream<Solution_> getTupleSource() {
        return parent.getTupleSource();
    }

}

        List<? extends ConstraintStream> groupStreamChildList = groupStream.getChildStreamList();
        nodeConstructor.build(buildHelper, parent.getTupleSource(), groupStream, groupStreamChildList, this, childStreamList,
                constraintFactory.getEnvironmentMode());
    
<methods>public void <init>(BavetConstraintFactory<Solution_>, org.optaplanner.constraint.streams.common.RetrievalSemantics) ,public BavetAbstractUniConstraintStream<Solution_,A> filter(Predicate<A>) ,public UniConstraintStream<ResultA_> flattenLast(Function<A,Iterable<ResultA_>>) ,public List<BavetAbstractUniConstraintStream<Solution_,A>> getChildStreamList() ,public UniConstraintStream<Result_> groupBy(UniConstraintCollector<A,ResultContainer_,Result_>) ,public BiConstraintStream<ResultA_,ResultB_> groupBy(UniConstraintCollector<A,ResultContainerA_,ResultA_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>) ,public TriConstraintStream<ResultA_,ResultB_,ResultC_> groupBy(UniConstraintCollector<A,ResultContainerA_,ResultA_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>) ,public QuadConstraintStream<ResultA_,ResultB_,ResultC_,ResultD_> groupBy(UniConstraintCollector<A,ResultContainerA_,ResultA_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>, UniConstraintCollector<A,ResultContainerD_,ResultD_>) ,public UniConstraintStream<GroupKey_> groupBy(Function<A,GroupKey_>) ,public TriConstraintStream<GroupKey_,ResultB_,ResultC_> groupBy(Function<A,GroupKey_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>) ,public QuadConstraintStream<GroupKey_,ResultB_,ResultC_,ResultD_> groupBy(Function<A,GroupKey_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>, UniConstraintCollector<A,ResultContainerD_,ResultD_>) ,public BiConstraintStream<GroupKey_,Result_> groupBy(Function<A,GroupKey_>, UniConstraintCollector<A,ResultContainer_,Result_>) ,public BiConstraintStream<GroupKeyA_,GroupKeyB_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>) ,public TriConstraintStream<GroupKeyA_,GroupKeyB_,Result_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, UniConstraintCollector<A,ResultContainer_,Result_>) ,public QuadConstraintStream<GroupKeyA_,GroupKeyB_,ResultC_,ResultD_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>, UniConstraintCollector<A,ResultContainerD_,ResultD_>) ,public TriConstraintStream<GroupKeyA_,GroupKeyB_,GroupKeyC_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, Function<A,GroupKeyC_>) ,public QuadConstraintStream<GroupKeyA_,GroupKeyB_,GroupKeyC_,ResultD_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, Function<A,GroupKeyC_>, UniConstraintCollector<A,ResultContainerD_,ResultD_>) ,public QuadConstraintStream<GroupKeyA_,GroupKeyB_,GroupKeyC_,GroupKeyD_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, Function<A,GroupKeyC_>, Function<A,GroupKeyD_>) ,public final transient UniConstraintStream<A> ifExists(Class<B>, BiJoiner<A,B>[]) ,public final transient UniConstraintStream<A> ifExists(UniConstraintStream<B>, BiJoiner<A,B>[]) ,public final transient UniConstraintStream<A> ifExistsIncludingNullVars(Class<B>, BiJoiner<A,B>[]) ,public final transient UniConstraintStream<A> ifNotExists(Class<B>, BiJoiner<A,B>[]) ,public final transient UniConstraintStream<A> ifNotExists(UniConstraintStream<B>, BiJoiner<A,B>[]) ,public final transient UniConstraintStream<A> ifNotExistsIncludingNullVars(Class<B>, BiJoiner<A,B>[]) ,public UniConstraintBuilder<A,Score_> innerImpact(Score_, ToIntFunction<A>, org.optaplanner.constraint.streams.common.ScoreImpactType) ,public UniConstraintBuilder<A,Score_> innerImpact(Score_, ToLongFunction<A>, org.optaplanner.constraint.streams.common.ScoreImpactType) ,public UniConstraintBuilder<A,Score_> innerImpact(Score_, Function<A,java.math.BigDecimal>, org.optaplanner.constraint.streams.common.ScoreImpactType) ,public final transient BiConstraintStream<A,B> join(UniConstraintStream<B>, BiJoiner<A,B>[]) ,public final BiConstraintStream<A,B> join(UniConstraintStream<B>, BiJoinerComber<A,B>) ,public UniConstraintStream<ResultA_> map(Function<A,ResultA_>) ,public Stream_ shareAndAddChild(Stream_) <variables>protected final List<BavetAbstractUniConstraintStream<Solution_,A>> childStreamList