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)}
}
请确保您输入的参数符合您的预期。
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)}
}
请确保您输入的参数符合您的预期。