繁体   English   中英

番石榴得到一个 map 的差异

[英]Guava getting one map for differences

我正在使用番石榴比较两个 JSON 文件并完成以下操作:

ObjectMapper mapper = new ObjectMapper();
TypeReference<HashMap<String, Object>> type = 
    new TypeReference<HashMap<String, Object>>() {};

Map<String, Object> leftMap = mapper.readValue(leftJson, type);
Map<String, Object> rightMap = mapper.readValue(rightJson, type);

MapDifference<String, Object> difference = Maps.difference(leftMap, rightMap);
System.out.println(difference.entriesDiffering());

Output

package=([{Name=Sarah}], [{Name=Conor}])

预期 output

package=([{Name=Conor}])

有谁知道如何操纵 output 只显示一侧?

我假设您希望以另一个Map<String,Object>结尾,但是从右侧(或者可能是左侧,您不会说)获取具有不同值的键的值。

import com.google.common.collect.MapDifference;
import com.google.common.collect.Maps;

import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        Map<String, Object> left = Map.of("name", "sarah");
        Map<String, Object> right = Map.of("name", "connor");
        MapDifference<String, Object> result = Maps.difference(left, right);
        Map<String,Object> f = result.entriesDiffering().entrySet().stream()
                .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue().rightValue()));
        System.out.println(f);
    }
}

MapDifference#entriesDiffering()返回Map<K,​MapDifference.ValueDifference<V>> ,所以请阅读ValueDifference并使用它的 API。

这是一个示例MRE

@Test
public void shouldShowDifferences() throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    TypeReference<HashMap<String, Object>> type =
            new TypeReference<HashMap<String, Object>>() {};

    String leftJson = "{\"package\": [{\"Name\": \"Sarah\"}]}";
    String rightJson = "{\"package\": [{\"Name\": \"Connor\"}]}";
    Map<String, Object> leftMap = mapper.readValue(leftJson, type);
    Map<String, Object> rightMap = mapper.readValue(rightJson, type);

    MapDifference<String, Object> difference = Maps.difference(leftMap, rightMap);
    System.out.println(difference.entriesDiffering());
    // {package=([{Name=Sarah}], [{Name=Connor}])}
    difference.entriesDiffering().forEach(
            (key, valueDifference) -> System.out.printf(
                    "key: '%s'; values: left: '%s', right: '%s'",
                    key, valueDifference.leftValue(), valueDifference.rightValue()));
    // key: 'package'; values: left: '[{Name=Sarah}]', right: '[{Name=Connor}]'
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM