private Map<SchemaKeyword, BiFunction<List<JsonNode>, Map<String, SchemaKeyword>, Supplier<? extends JsonNode>>> prepareAllOfMergeFunctions() {
        Map<SchemaKeyword, BiFunction<List<JsonNode>, Map<String, SchemaKeyword>, Supplier<? extends JsonNode>>> result = new HashMap<>();

        BiFunction<List<JsonNode>, Map<String, SchemaKeyword>, Supplier<? extends JsonNode>> mergeArrays =
                (valuesToMerge, _ignored) -> this.mergeArrays(valuesToMerge);
        Stream.of(SchemaKeyword.TAG_ALLOF, SchemaKeyword.TAG_REQUIRED)
                .forEach(keyword -> result.put(keyword, mergeArrays));

        result.put(SchemaKeyword.TAG_PROPERTIES,
                (valuesToMerge, _ignored) -> this.mergeObjectProperties(valuesToMerge));
        result.put(SchemaKeyword.TAG_DEPENDENT_REQUIRED,
                (valuesToMerge, _ignored) -> this.mergeDependentRequiredNode(valuesToMerge));
        result.put(SchemaKeyword.TAG_DEPENDENT_SCHEMAS,
                (valuesToMerge, _ignored) -> {
                    if (this.config.getSchemaVersion() == SchemaVersion.DRAFT_6 || this.config.getSchemaVersion() == SchemaVersion.DRAFT_7) {
                        // in Draft 6 and Draft 7, the "dependencies" keyword was covering both "dependentSchemas" and "dependentRequired" scenarios
                        return Optional.ofNullable(this.mergeDependentRequiredNode(valuesToMerge))
                                .orElseGet(() -> this.mergeObjectProperties(valuesToMerge));
                    } else {
                        return this.mergeObjectProperties(valuesToMerge);
                    }
                });

        BiFunction<List<JsonNode>, Map<String, SchemaKeyword>, Supplier<? extends JsonNode>> schemaMerge =
                (valuesToMerge, reverseKeywordMap) -> this.mergeSchemas(null, valuesToMerge, reverseKeywordMap);
        Stream.of(SchemaKeyword.TAG_ITEMS, SchemaKeyword.TAG_UNEVALUATED_ITEMS, SchemaKeyword.TAG_ADDITIONAL_PROPERTIES,
                SchemaKeyword.TAG_UNEVALUATED_PROPERTIES)
                .forEach(keyword -> result.put(keyword, schemaMerge));
        result.put(SchemaKeyword.TAG_TYPE,
                (valuesToMerge, _ignored) -> this.returnOverlapOfStringsOrStringArrays(valuesToMerge));

        BiFunction<List<JsonNode>, Map<String, SchemaKeyword>, Supplier<? extends JsonNode>> minimumNumeric =
                (valuesToMerge, _ignored) -> this.returnMinimumNumericValue(valuesToMerge);
        Stream.of(SchemaKeyword.TAG_ITEMS_MAX, SchemaKeyword.TAG_PROPERTIES_MAX, SchemaKeyword.TAG_MAXIMUM, SchemaKeyword.TAG_MAXIMUM_EXCLUSIVE,
                SchemaKeyword.TAG_LENGTH_MAX)
                .forEach(keyword -> result.put(keyword, minimumNumeric));

        BiFunction<List<JsonNode>, Map<String, SchemaKeyword>, Supplier<? extends JsonNode>> maximumNumeric =
                (valuesToMerge, _ignored) -> this.returnMaximumNumericValue(valuesToMerge);
        Stream.of(SchemaKeyword.TAG_ITEMS_MIN, SchemaKeyword.TAG_PROPERTIES_MIN, SchemaKeyword.TAG_MINIMUM, SchemaKeyword.TAG_MINIMUM_EXCLUSIVE,
                        SchemaKeyword.TAG_LENGTH_MIN)
                .forEach(keyword -> result.put(keyword, maximumNumeric));
        return result;
    }
Constructor.

@param config configuration to be applied
jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/impl/SchemaCleanUpUtils.java