Java 断言具有嵌套映射字段的两个对象的不等式
我正在尝试以下类类型的两个对象之间的两个断言不等式Java 断言具有嵌套映射字段的两个对象的不等式,java,junit,equals,assert,Java,Junit,Equals,Assert,我正在尝试以下类类型的两个对象之间的两个断言不等式 public class CustomDr{ private Map<String,Map<String,Set<String>>> field1; .... .... @Override public boolean equals(final Object obj) { if (this == null || obj == null) return false; CustomDr CustomDr =
public class CustomDr{
private Map<String,Map<String,Set<String>>> field1;
....
....
@Override
public boolean equals(final Object obj) {
if (this == null || obj == null)
return false;
CustomDr CustomDr = null;
if (obj instanceof CustomDr) {
CustomDr = (CustomDr) obj;
}
final Map<String, Map<String, Set<String>>> appltCustomDrMap1 =
this.field1;
final Map<String, Map<String, Set<String>>> appltCustomDrMap2 =
CustomDr.field1;
for (final String applt : appltCustomDrMap1.keySet()) {
if (!appltCustomDrMap2.containsKey(applt)) {
return false;
}
}
for (final String applt : appltCustomDrMap1.keySet()) {
final Map<String, Set<String>> productappldCustomDrMap1 =
appltCustomDrMap1.get(applt);
final Map<String, Set<String>> productappldCustomDrMap2 =
appltCustomDrMap2.get(applt);
if (productappldCustomDrMap1.size() != productappldCustomDrMap2
.size()) {
return false;
}
for (final String productappld : productappldCustomDrMap1
.keySet()) {
if (!productappldCustomDrMap2.containsKey(productappld))
return false;
}
for (final String productappld : productappldCustomDrMap1
.keySet()) {
Collections.sort(new ArrayList(productappldCustomDrMap1
.get(productappld)));
Collections.sort(new ArrayList(productappldCustomDrMap2
.get(productappld)));
if (!productappldCustomDrMap1.get(productappld).equals(
productappldCustomDrMap2.get(productappld)))
return false;
}
}
}
总之,我想知道如何将两个贴图的交集断言为空?您可以通过计算两个贴图的输入集的交集来计算它们的交集 要以非破坏性的方式执行此操作(即,在不更改两张地图的情况下),您必须执行以下操作:
Map<String, Map<String, Set<String>>> intersection = new HashMap<>(map1);
intersection.entrySet().retainAll(map2.entrySet());
boolean empty = intersection.isEmpty();
Map intersection=newhashmap(map1);
intersection.entrySet().retainal(map2.entrySet());
布尔空=交集.isEmpty();
本质上,首先创建其中一个映射的副本,然后仅保留第二个映射中也存在的条目。如果结果不是空的,则表示两个映射中都有公共元素
这里有一个完整的片段供您进行实验:
Map<String, Map<String, Set<String>>> map1 = new HashMap<>();
Map<String, Map<String, Set<String>>> map2 = new HashMap<>();
map1.put("POne", new HashMap<>());
map1.get("POne").put("PT2", new HashSet<>());
map1.get("POne").get("PT2").add("MN12");
map1.get("POne").put("PT3", new HashSet<>());
map1.get("POne").get("PT3").add("MN13");
map1.put("PTwo", new HashMap<>());
map1.get("PTwo").put("PT3", new HashSet<>());
map1.get("PTwo").get("PT3").add("MN12");
map1.get("PTwo").put("PT4", new HashSet<>());
map1.get("PTwo").get("PT4").add("MN14");
map2.put("POne", new HashMap<>());
map2.get("POne").put("PT2", new HashSet<>());
map2.get("POne").get("PT2").add("MN12");
map2.get("POne").put("PT3", new HashSet<>());
map2.get("POne").get("PT3").add("MN13");
map2.put("PTwo", new HashMap<>());
map2.get("PTwo").put("PT8", new HashSet<>());
map2.get("PTwo").get("PT8").add("MN15");
map2.get("PTwo").put("PT4", new HashSet<>());
map2.get("PTwo").get("PT4").add("MN14");
Map<String, Map<String, Set<String>>> intersection = new HashMap<>(map1);
intersection.entrySet().retainAll(map2.entrySet());
boolean empty = intersection.isEmpty();
System.out.println(empty); // false
Map map1=newhashmap();
Map map2=新的HashMap();
put(“POne”,新的HashMap());
map1.get(“POne”).put(“PT2”,新的HashSet());
map1.get(“POne”).get(“PT2”).add(“MN12”);
map1.get(“POne”).put(“PT3”,newhashset());
map1.获取(“POne”).获取(“PT3”).添加(“MN13”);
put(“PTwo”,newhashmap());
map1.get(“PTwo”).put(“PT3”,newhashset());
map1.获取(“PTwo”).获取(“PT3”).添加(“MN12”);
map1.get(“PTwo”).put(“PT4”,新的HashSet());
map1.获取(“PTwo”).获取(“PT4”).添加(“MN14”);
put(“POne”,新的HashMap());
map2.get(“POne”).put(“PT2”,newhashset());
map2.get(“POne”).get(“PT2”).add(“MN12”);
map2.get(“POne”).put(“PT3”,newhashset());
map2.get(“POne”).get(“PT3”).add(“MN13”);
put(“PTwo”,newhashmap());
map2.get(“PTwo”).put(“PT8”,newhashset());
map2.获取(“PTwo”).获取(“PT8”).添加(“MN15”);
map2.get(“PTwo”).put(“PT4”,新的HashSet());
map2.获取(“PTwo”).获取(“PT4”).添加(“MN14”);
地图交叉点=新的HashMap(地图1);
intersection.entrySet().retainal(map2.entrySet());
布尔空=交集.isEmpty();
System.out.println(空);//假的
java.util.Map提供的标准equals()
方法有什么问题?实际上,您提供的现有equals方法存在一些问题。首先,这两种排序方法实际上都不起任何作用,而整个过程可以通过简单的this.map.equals(other.map)
来实现,就像@RobbyCornelissen所说的那样,删除大部分代码。然而,你的总体意图并不清楚。你说你给出的两个对象(根据你的定义是不相等的)在你的测试中确实是不相等的,但是你想让它们被认为是相等的?那里的确切要求是什么?这个问题完全不清楚。您有两个不相等的对象,您希望它们被视为相等,因为它们有一个相同的键/值对?你想知道两张地图的交点是否为空吗?@RobbyCornelissen正是我想要两张地图的交点为空
Map<String, Map<String, Set<String>>> map1 = new HashMap<>();
Map<String, Map<String, Set<String>>> map2 = new HashMap<>();
map1.put("POne", new HashMap<>());
map1.get("POne").put("PT2", new HashSet<>());
map1.get("POne").get("PT2").add("MN12");
map1.get("POne").put("PT3", new HashSet<>());
map1.get("POne").get("PT3").add("MN13");
map1.put("PTwo", new HashMap<>());
map1.get("PTwo").put("PT3", new HashSet<>());
map1.get("PTwo").get("PT3").add("MN12");
map1.get("PTwo").put("PT4", new HashSet<>());
map1.get("PTwo").get("PT4").add("MN14");
map2.put("POne", new HashMap<>());
map2.get("POne").put("PT2", new HashSet<>());
map2.get("POne").get("PT2").add("MN12");
map2.get("POne").put("PT3", new HashSet<>());
map2.get("POne").get("PT3").add("MN13");
map2.put("PTwo", new HashMap<>());
map2.get("PTwo").put("PT8", new HashSet<>());
map2.get("PTwo").get("PT8").add("MN15");
map2.get("PTwo").put("PT4", new HashSet<>());
map2.get("PTwo").get("PT4").add("MN14");
Map<String, Map<String, Set<String>>> intersection = new HashMap<>(map1);
intersection.entrySet().retainAll(map2.entrySet());
boolean empty = intersection.isEmpty();
System.out.println(empty); // false