in bval-jsr/src/main/java/org/apache/bval/jsr/metadata/DualBuilder.java [80:110]
<K, D> Map<K, D> merge(Function<DELEGATE, Map<K, D>> toMap, BiFunction<D, D, D> parallel,
Supplier<D> emptyBuilder) {
final Map<K, D> primaries = toMap.apply(primaryDelegate);
final Map<K, D> customs = toMap.apply(customDelegate);
if (primaries.isEmpty() && customs.isEmpty()) {
return Collections.emptyMap();
}
final Function<? super K, ? extends D> valueMapper = k -> {
final D primary = primaries.get(k);
final D custom = customs.get(k);
if (custom == null) {
if (primary != null) {
switch (getCustomAnnotationBehavior()) {
case INCLUDE:
case ABSTAIN:
return primary;
default:
break;
}
}
return emptyBuilder.get();
}
return parallel.apply(primary, custom);
};
return Stream.of(primaries, customs).map(Map::keySet).flatMap(Collection::stream).distinct()
.collect(Collectors.toMap(Function.identity(), valueMapper));
}