public static Map<String, Object> mergeWithNullableValues(final Map<String, Object>...maps) {
        return Arrays.stream(maps)
            .flatMap(map -> map.entrySet().stream())
            // https://bugs.openjdk.org/browse/JDK-8148463
            .collect(HashMap::new, (m, v) -> m.put(v.getKey(), v.getValue()), HashMap::putAll);
    }
@Test
    void shouldMergeWithNullableValuesGivenNullAndDuplicate() {
        @SuppressWarnings("unchecked")
        Map<String, Object> results = MapUtils.mergeWithNullableValues(
            Map.of("k1", "v1", "k2", "v1", "k3", "v1"),
            Map.of("k1", "v2"),
            Map.of("k2", "v2"),
            Map.of("k3", "v2"),
            new HashMap<>() {{
                put("k4", null);
            }}
        );

        Assertions.assertEquals(4, results.size());
        Assertions.assertEquals("v2", results.get("k1"));
        Assertions.assertEquals("v2", results.get("k2"));
        Assertions.assertEquals("v2", results.get("k3"));
        Assertions.assertNull(results.get("k4"));
    }