in bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupStrategy.java [183:212]
public static GroupStrategy composite(Collection<? extends GroupStrategy> components) {
if (components.isEmpty()) {
return EMPTY;
}
if (components.size() == 1) {
return components.iterator().next();
}
final Set<GroupStrategy> compressedComponents = new LinkedHashSet<>();
final Consumer<Set<Group>> addGroups = s -> {
if (!s.isEmpty()) {
compressedComponents.add(simple(s));
s.clear();
}
};
final Set<Group> unorderedGroups = new HashSet<>();
for (GroupStrategy component : components) {
if (component instanceof Composite && ((Composite) component).ordered) {
addGroups.accept(unorderedGroups);
compressedComponents.add(component);
continue;
}
unorderedGroups.addAll(component.getGroups());
}
addGroups.accept(unorderedGroups);
if (compressedComponents.size() == 1) {
return compressedComponents.iterator().next();
}
return new Composite(compressedComponents, false);
}