我有一张地图将我的ClassA存储为一个键,一些例外存储为值。
我还有一个包含ClassB对象的列表。
ClassA有一个条目X(Long),ClassB有一个条目Y(ClassY),它也有一个字段X(String)。
现在我应该在地图中找到ClassA.getX == ClassB.getY.getX
但问题是我只能通过密钥搜索ın地图,而密钥对象必须是ClassA。否则返回null。
这是我的迭代:
list = listModelNewSc;
for (int i = 0; i < exceptionMap.size(); i++) {
for (int k = 0; k < list.getSize(); k++) {
if (((ClassA) exceptionMap.get(i)).getX() == Long
.parseLong((((CLassB) list.getElementAt(k)).getY().getX()))) {
Listitem itemAtIndex = list.getItemAtIndex(i);
if (itemAtIndex != null) {
System.out.print("FOUND");
}
}
}
}
答案 0 :(得分:1)
使用您描述的设置执行此操作的唯一方法是迭代地图中的所有键,直到找到所需的键。
或者,您可以使用第二个地图ClassA.getX
作为关键字(映射到相同的值)。
基本上它是一个权衡,第一个解决方案是较慢但使用较少的内存,第二个解决方案更快但使用更多内存(你有两个地图副本)。
答案 1 :(得分:0)
迭代键集或入口集。
答案 2 :(得分:0)
一个解决方案,没试过,但告诉我它是否有效:) 据我所知,当你调用Map.get(...)时,它使用键'equals(o)和hashCode()方法。作为您问题的解决方案,您可以以某种“错误”方式覆盖ClassA的这些方法,如下所示:
@Override
public int hashCode() {
// If you know that the code of a key instance has no logic value anywhere else, give constant value here and in ClassB
return 99827;
}
@Override
public boolean equals(Object o) {
// This will (maybe) make Map.get(ClassB) work with ClassA as a key
if (o instanceof ClassB) {
ClassB cb = (ClassB) o;
return this.getX() == cb.getY().getX();
} else if (o instanceof ClassA) {
// ...
}
return false;
}
那么你只需要执行exceptionMap.get(classB)并希望获得异常。