
org.optaplanner.constraint.streams.drools.bi.DroolsGroupingBiConstraintStream Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.optaplanner.constraint.streams.drools.bi;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
import org.optaplanner.constraint.streams.drools.DroolsConstraintFactory;
import org.optaplanner.constraint.streams.drools.common.BiLeftHandSide;
import org.optaplanner.constraint.streams.drools.quad.DroolsAbstractQuadConstraintStream;
import org.optaplanner.constraint.streams.drools.tri.DroolsAbstractTriConstraintStream;
import org.optaplanner.constraint.streams.drools.uni.DroolsAbstractUniConstraintStream;
import org.optaplanner.core.api.function.QuadFunction;
import org.optaplanner.core.api.function.TriFunction;
import org.optaplanner.core.api.score.stream.bi.BiConstraintCollector;
import org.optaplanner.core.api.score.stream.quad.QuadConstraintCollector;
import org.optaplanner.core.api.score.stream.tri.TriConstraintCollector;
import org.optaplanner.core.api.score.stream.uni.UniConstraintCollector;
public final class DroolsGroupingBiConstraintStream
extends DroolsAbstractBiConstraintStream {
private final Supplier> leftHandSide;
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractUniConstraintStream parent, Function groupKeyAMapping,
Function groupKeyBMapping) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(groupKeyAMapping, groupKeyBMapping);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractBiConstraintStream parent, BiFunction groupKeyAMapping,
BiFunction groupKeyBMapping) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(groupKeyAMapping, groupKeyBMapping);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractTriConstraintStream parent, TriFunction groupKeyAMapping,
TriFunction groupKeyBMapping) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(groupKeyAMapping, groupKeyBMapping);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractQuadConstraintStream parent,
QuadFunction groupKeyAMapping, QuadFunction groupKeyBMapping) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(groupKeyAMapping, groupKeyBMapping);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractUniConstraintStream parent, Function groupKeyMapping,
UniConstraintCollector collector) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(groupKeyMapping, collector);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractBiConstraintStream parent, BiFunction groupKeyMapping,
BiConstraintCollector collector) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(groupKeyMapping, collector);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractTriConstraintStream parent, TriFunction groupKeyMapping,
TriConstraintCollector collector) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(groupKeyMapping, collector);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractQuadConstraintStream parent,
QuadFunction groupKeyMapping, QuadConstraintCollector collector) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(groupKeyMapping, collector);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractUniConstraintStream parent, UniConstraintCollector collectorA,
UniConstraintCollector collectorB) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(collectorA, collectorB);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractBiConstraintStream parent, BiConstraintCollector collectorA,
BiConstraintCollector collectorB) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(collectorA, collectorB);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractTriConstraintStream parent,
TriConstraintCollector collectorA, TriConstraintCollector collectorB) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(collectorA, collectorB);
}
public DroolsGroupingBiConstraintStream(DroolsConstraintFactory constraintFactory,
DroolsAbstractQuadConstraintStream parent,
QuadConstraintCollector collectorA,
QuadConstraintCollector collectorB) {
super(constraintFactory, parent.getRetrievalSemantics());
this.leftHandSide = () -> parent.createLeftHandSide().andGroupBy(collectorA, collectorB);
}
@Override
public boolean guaranteesDistinct() {
return true;
}
@Override
public BiLeftHandSide createLeftHandSide() {
return leftHandSide.get();
}
@Override
public String toString() {
return "BiGroup() with " + getChildStreams().size() + " children";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy