我有一个HashMap<Ist, Ist> registro = new HashMap<Ist, Ist>()
我需要找到某些值的键,为此我使用我找到的方法
public static <T, E> T getKeyByValue(Map<T, E> map, E value) {
for (Map.Entry<T, E> entry : map.entrySet()) {
if (Objects.equals(value, entry.getValue())) {
return entry.getKey();
}
}
return null;
}
我愿意registro.put(origenCopia, istOrigen)
但是getKeyByValue(this.registro, istDestino)
返回 null,我猜这是因为 istDestino 和 istOrigen 不是完全相同的对象,但它们的内容是。
最佳答案
这似乎是因为您没有为您的 Ist
实现/覆盖默认的 .equals()
和 .hashCode()
方法> 类。
如果您使用 IDE 进行开发,您可以(在 99% 的情况下)自动生成它们。有关如何在 IDE 中实现此目的的快速 Google 搜索应该会有所帮助。
基本上,您需要实现这 2 个方法,以便告诉 JVM 您想要如何比较对象。这基本上意味着哪些属性必须相等。
除非您实现上述方法,否则只有当您的对象确实是同一个对象时(无论它们是否具有相同的属性),它们才是相等的。
关于java - 需要在 HashMap 中查找对象类型值的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50099411/