Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 断言具有嵌套映射字段的两个对象的不等式_Java_Junit_Equals_Assert - Fatal编程技术网

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