Guava MapDifference 的问题不是返回差异而是两个地图

Issue with Guava MapDifference is not returning the diffrence but both maps

    public static Map<String, MapDifference.ValueDifference<String>> mapCompare(HashMap<String, String> hm, HashMap<String,String> hm2){
    MapDifference<String, String> diff = Maps.difference(hm, hm2);

    Map<String, MapDifference.ValueDifference<String>> entriesDiffering = diff.entriesDiffering();

    System.out.println("difrence  is -->" +entriesDiffering);
    return entriesDiffering;
}

hm1(hashmap1 值)

1:abc 2:xyz 3:eedd 4:[]asdfasd

hm2

1:abc 2:xyz 3:eedd 4:[]asdfas2d

**注意 hm2 第 4 个键项有不同的值。

实际输出

区别是 -->{1=(abc 2:xyz 3:eedd 4:[]asdfasd, abc 2:xyz 3:eedd 4:[]asdfas2d)}

注意:- 第一个键在第一个映射中用 = 分隔,而第二个映射中第一个键完全丢失)不确定原因。但这不是我要解决的问题。

预期:(仅差)

4:[]asdfas2d

如果输入是具有 4 个条目的适当映射,则它工作正常,如此处所示(我使用 Splitter#withKeyValueSeparator 解析字符串以映射:

@Test
public void properlyParsedMaps() {
    Map<String, String> map1 = MAP_SPLITTER.split("1:abc 2:xyz 3:eedd 4:[]asdfasd");  // {1=abc, 2=xyz, 3=eedd, 4=[]asdfasd}
    Map<String, String> map2 = MAP_SPLITTER.split("1:abc 2:xyz 3:eedd 4:[]asdfas2d"); // {1=abc, 2=xyz, 3=eedd, 4=[]asdfas2d}
    mapCompare(map1, map2); // signature slightly changed to accept any `Map`, not just `HashMap`
    // difrence  is -->{4=([]asdfasd, []asdfas2d)}
}

另一方面,在您的示例中,您的地图似乎有一个键 "1" 和值,这是字符串的其余部分(因此可能未按您预期的方式解析):

@Test
public void reverseEngineeredMapsFromOutput() {
    Map<String, String> map1 = ImmutableMap.of("1", "abc 2:xyz 3:eedd 4:[]asdfasd");  // {1=abc 2:xyz 3:eedd 4:[]asdfasd}
    Map<String, String> map2 = ImmutableMap.of("1", "abc 2:xyz 3:eedd 4:[]asdfas2d"); // {1=abc 2:xyz 3:eedd 4:[]asdfas2d}
    mapCompare(map1, map2);
    // difrence  is -->{1=(abc 2:xyz 3:eedd 4:[]asdfasd, abc 2:xyz 3:eedd 4:[]asdfas2d)}
}

请确保您输入的参数符合您的预期。