С функциональным интерфейсом, который соответствует вашим функциям правил f1
, f2
, f3
...:
interface RuleFunction extends Function<Rules, Rules> { }
Вы можете написать один класс, который будет применять любую комбинацию правил, которые выпередайте его:
public class RuleApplier {
private RuleFunction[] steps;
public RuleApplier(RuleFunction... steps) {
Objects.requireNonNull(steps);
this.steps = steps;
}
public List<Map<String, String>> apply(List<Map<String, String>> listOfMap) {
Rules rules = new Rules().getListAddresses(listOfMap);
for (RuleFunction step : steps) {
rules = step.apply(rules);
}
return rules.fOut();
}
}
Когда вы создаете ссылки на метод класса, предоставьте удобное сокращение, которое можно использовать для ссылки на применяемые правила:
List<Map<String, String>> listOfMap = dropActiveStatus(listOfMapInout);
RuleApplier applierA = new RuleApplier(Rules::f1, Rules::f2, Rules::f3, Rules::f4);
List<Map<String, String>> listOfMapOutA = applierA.apply(listOfMap);
RuleApplier applierB = new RuleApplier(Rules::f5, Rules::f6);
List<Map<String, String>> listOfMapOutB = applierB.apply(listOfMap);