我真的不喜欢在这里问,但是这次我搜索了,阅读了文档,在其他地方寻求帮助,显然没有人知道如何解决我的问题。
我将Google Guava的BiMap
用于我的Java应用程序,因为在这种情况下,我需要特定值的键(键和值也都是唯一的)。在非反向视图中,键是long
,该值是一个自己的类(它也实现了hashCode
和equals
)。
现在,我有一个特定的条目,从中我仅知道该值(但是,我知道该条目存在,我也做了一些检查,您也可以在下面看到)。但是,如果我反转映射并将已知值用作键,则返回的值始终为null
。为确保问题出在这一特定点,我对一些调试行进行了硬编码:https://hastebin.com/gisojogune.cs
(不幸的是,由于我在移动atm上,因此无法将其粘贴到其他位置)
如果有人能够帮助我,我将感到非常高兴,因为我必须在明天之前完成此工作。是的。
谢谢, 约翰尼
编辑:在链接中,另一个Map
应该被称为requests
。没关系。
答案 0 :(得分:0)
根据您提供的稀缺信息,很难提供帮助,但此行令人怀疑:
var link = requests.get(aLong); // this should be the same instance that is assigned to the key 458653247347884035L
如果aLong
与458653247347884035L
不同(但是我不确定这是否就是您的意思),那么不可能 1 BiMap
包含两个具有不同密钥的相同Link
。如果这就是您的意思,那么您的hashCode
/ equals
逻辑可能有问题。
1 作为证明,请尝试运行以下小片段:
String link = "same-instance";
BiMap<Long, String> requesters = HashBiMap.create();
requesters.put(1L, link);
requesters.put(2L, link);
您将收到以下异常:
java.lang.IllegalArgumentException: value already present: same-instance