public static MultiRefDataValueProxy merge(final RefDataValueProxy existingRefDataValueProxy,
                                               final RefDataValueProxy newRefDataValueProxy) {
        Objects.requireNonNull(existingRefDataValueProxy);
        Objects.requireNonNull(newRefDataValueProxy);

        if (!Objects.equals(existingRefDataValueProxy.getKey(), newRefDataValueProxy.getKey())) {
            throw new RuntimeException(LogUtil.message("All keys should be the same. Found '{}' and '{}'",
                    existingRefDataValueProxy.getKey(),
                    newRefDataValueProxy.getKey()));
        }

        if (!Objects.equals(existingRefDataValueProxy.getMapName(), newRefDataValueProxy.getMapName())) {
            throw new RuntimeException(LogUtil.message("All map names should be the same. Found '{}' and '{}'",
                    existingRefDataValueProxy.getMapName(),
                    newRefDataValueProxy.getMapName()));
        }

        // Order is CRITICAL here, so we attempt lookups in the right order
        final List<SingleRefDataValueProxy> existingProxies = getContainedProxies(existingRefDataValueProxy);
        final List<SingleRefDataValueProxy> newProxies = getContainedProxies(newRefDataValueProxy);
        final ArrayList<SingleRefDataValueProxy> combinedList = new ArrayList<>(
                existingProxies.size() + newProxies.size());

        // Order is CRITICAL here, so we attempt lookups in the right order
        combinedList.addAll(existingProxies);
        combinedList.addAll(newProxies);

        LOGGER.trace(() -> LogUtil.message("Merging {} proxies in this order\n{}",
                combinedList.size(),
                combinedList.stream()
                        .map(proxy -> "  " + proxy.toString())
                        .collect(Collectors.joining("\n"))));

        return new MultiRefDataValueProxy(Collections.unmodifiableList(combinedList));
    }
Merge the two proxies into one combined one that will use each contained proxy to try to get a value.
Argument order is CRITICAL to ensure lookups are done in the correct order.

@param existingRefDataValueProxy The existing
@param newRefDataValueProxy
@return
stroom-pipeline/src/main/java/stroom/pipeline/refdata/store/MultiRefDataValueProxy.java