Java recursive map deep clone and merge

Java
import java.util.LinkedHashMap;
import java.util.Map;

public final class Maps {
    @SuppressWarnings("unchecked")
    public static Map<String, Object> clone(Map<String, Object> src) {
        Map<String, Object> out = new LinkedHashMap<>();
        src.forEach((k, v) -> out.put(k, v instanceof Map ? clone((Map<String, Object>) v) : v));
        return out;
    }

    @SuppressWarnings("unchecked")
    public static Map<String, Object> merge(Map<String, Object> base, Map<String, Object> over) {
        Map<String, Object> out = clone(base);
        over.forEach((k, v) -> out.merge(k, v, (a, b) -> a instanceof Map && b instanceof Map
                ? merge((Map<String, Object>) a, (Map<String, Object>) b) : b));
        return out;
    }
}