在某些场景下,想要比较两个Map的不同,如果自己手动写的话,实现起来代码烦杂,此时可以使用Guava提供的Maps类的difference方法,实现快速的比较不同,结果保存在不同的map中,主要方法如下:
import com.google.common.collect.MapDifference;
import com.google.common.collect.Maps;
import java.util.HashMap;
import java.util.Map;
public class GuavaMain {
public static void main(String[] args) {
Map<String,Object> left = new HashMap<>();
Map<String,Object> right = new HashMap<>();
left.put("A","B");
left.put("B","B");
left.put("C","C");
left.put("D","D");
right.put("A","A");
right.put("B","B");
right.put("E","E");
/**
* 保存比较结果
*/
MapDifference<String,Object> difference = Maps.difference(left,right);
/**
* entriesInCommon
* 保存两边都有的结果
*/
Map<String,Object> map = difference.entriesInCommon();
for (Map.Entry entry : map.entrySet()){
System.out.println(entry.getKey() + " " + entry.getValue());
}
System.out.println("------------------");
/**
* 只存在左边的建
*/
map = difference.entriesOnlyOnLeft();
for (Map.Entry entry : map.entrySet()){
System.out.println(entry.getKey() + " " + entry.getValue());
}
System.out.println("------------------");
/**
* 只存在右边的建
*/
map = difference.entriesOnlyOnRight();
for (Map.Entry entry : map.entrySet()){
System.out.println(entry.getKey() + " " + entry.getValue());
}
System.out.println("------------------");
/**
* 都存在的键,但是值不一样
*/
Map<String,MapDifference.ValueDifference<Object>> map1 = difference.entriesDiffering();
for (Map.Entry entry : map1.entrySet()){
System.out.println(entry.getKey() + " " + entry.getValue());
}
System.out.println("------------------");
/**
* 两个map是否相等
*/
System.out.println(difference.areEqual());
System.out.println("------------------");
}
}