我已经设置了一个测试:
- 检索有关多个法庭案件的数据:每个法庭案件都存储在一个 CourtCase 对象中
- 然后将一组 CourtCase 对象存储在 Map
- 我两次检索这些数据(来自两个不同的来源)所以我最终得到了两个地图
对象内的数据在 Map 之间应该相同,但 Map 内对象的顺序可能不一样:
地图1:A,案例1 - B,案例2 - C,案例3
地图2:B,案例2 - A,案例1 - C,案例3
我怎样才能最好地比较这两个地图?
我已经设置了一个测试:
对象内的数据在 Map 之间应该相同,但 Map 内对象的顺序可能不一样:
地图1:A,案例1 - B,案例2 - C,案例3
地图2:B,案例2 - A,案例1 - C,案例3
我怎样才能最好地比较这两个地图?
Map#equals
不关心订单。只要您的 2 个地图包含相同的映射,它就会返回 true。
Map#equals
使用Set#equals
方法,应用于条目集。Set#equals
合同:
如果指定对象也是一个集合,则返回 true,这两个集合具有相同的大小,并且指定集合的每个成员都包含在此集合中(或等效地,此集合的每个成员都包含在指定集合中)。
注意:这假设您的CourtCase
对象具有要比较的适当equals
和方法。hashcode
Map 实现提供了一个 equals 方法来解决问题。Map.equals
@user973718 在java中比较两个映射对象的最佳方法是-您可以将映射的键添加到列表中,并且使用这两个列表,您可以使用方法retainAll() 和removeAll() 并将它们添加到另一个公共键列表和不同的键列表。使用公共列表和不同列表的键可以遍历映射,使用等于可以比较映射。
下面的代码给出了这个输出: Before {b=2, c=3, a=1} After {c=333, a=1} Unequal: Before- 3 After- 333 Equal: Before- 1 After- 1 仅存在值在地图之前:2
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
public class Demo
{
public static void main(String[] args)
{
Map<String, String> beforeMap = new HashMap<String, String>();
beforeMap.put("a", "1");
beforeMap.put("b", "2");
beforeMap.put("c", "3");
Map<String, String> afterMap = new HashMap<String, String>();
afterMap.put("a", "1");
afterMap.put("c", "333");
System.out.println("Before "+beforeMap);
System.out.println("After "+afterMap);
List<String> beforeList = getAllKeys(beforeMap);
List<String> afterList = getAllKeys(afterMap);
List<String> commonList1 = beforeList;
List<String> commonList2 = afterList;
List<String> diffList1 = getAllKeys(beforeMap);
List<String> diffList2 = getAllKeys(afterMap);
commonList1.retainAll(afterList);
commonList2.retainAll(beforeList);
diffList1.removeAll(commonList1);
diffList2.removeAll(commonList2);
if(commonList1!=null & commonList2!=null) // athough both the size are same
{
for (int i = 0; i < commonList1.size(); i++)
{
if ((beforeMap.get(commonList1.get(i))).equals(afterMap.get(commonList1.get(i))))
{
System.out.println("Equal: Before- "+ beforeMap.get(commonList1.get(i))+" After- "+afterMap.get(commonList1.get(i)));
}
else
{
System.out.println("Unequal: Before- "+ beforeMap.get(commonList1.get(i))+" After- "+afterMap.get(commonList1.get(i)));
}
}
}
if (CollectionUtils.isNotEmpty(diffList1))
{
for (int i = 0; i < diffList1.size(); i++)
{
System.out.println("Values present only in before map: "+beforeMap.get(diffList1.get(i)));
}
}
if (CollectionUtils.isNotEmpty(diffList2))
{
for (int i = 0; i < diffList2.size(); i++)
{
System.out.println("Values present only in after map: "+afterMap.get(diffList2.get(i)));
}
}
}
/**getAllKeys API adds the keys of the map to a list */
private static List<String> getAllKeys(Map<String, String> map1)
{
List<String> key = new ArrayList<String>();
if (map1 != null)
{
Iterator<String> mapIterator = map1.keySet().iterator();
while (mapIterator.hasNext())
{
key.add(mapIterator.next());
}
}
return key;
}
}