Google Guava BiMap-反向获取方法不起作用

时间:2018-07-21 15:22:33

标签: java collections guava bimap

我真的不喜欢在这里问,但是这次我搜索了,阅读了文档,在其他地方寻求帮助,显然没有人知道如何解决我的问题。

我将Google Guava的BiMap用于我的Java应用程序,因为在这种情况下,我需要特定值的键(键和值也都是唯一的)。在非反向视图中,键是long,该值是一个自己的类(它也实现了hashCodeequals)。

现在,我有一个特定的条目,从中我仅知道该值(但是,我知道该条目存在,我也做了一些检查,您也可以在下面看到)。但是,如果我反转映射并将已知值用作键,则返回的值始终为null。为确保问题出在这一特定点,我对一些调试行进行了硬编码:https://hastebin.com/gisojogune.cs (不幸的是,由于我在移动atm上,因此无法将其粘贴到其他位置)

如果有人能够帮助我,我将感到非常高兴,因为我必须在明天之前完成此工作。是的。

谢谢, 约翰尼

编辑:在链接中,另一个Map应该被称为requests。没关系。

1 个答案:

答案 0 :(得分:0)

根据您提供的稀缺信息,很难提供帮助,但此行令人怀疑:

var link = requests.get(aLong); // this should be the same instance that is assigned to the key 458653247347884035L

如果aLong458653247347884035L不同(但是我不确定这是否就是您的意思),那么不可能 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