我有以下BiMap集合:

BiMap<String,String> accessIds = HashBiMap.create();
accessIds.put("FOO","accessId 1"); //This access Id is common to both FOO and BAR

BiMap<String,String> merchants = HashBiMap.create();
merchants.put("FOO", "merchant 1"); //Both FOO and BAR each have unique merchants
merchants.put("BAR", "merchant 2");


这些是我目前拥有的4个收藏中的2个。所有4个集合共享相同的键,但值不同。

我的问题是:当我的merchant 2的accessIds密钥如何确保获得FOO

在有人指出这两个集合实际上没有共享相同的键之前,请记住BiMap强制使用唯一值,因此我无法在集合中列出"BAR","accessId 1"

我不相信BiMap是正确的集合,但是我确实使用了它的inverse()方法。如果有更适合的收藏(或我忽略的其他方法),请告诉我。

仅供参考:我将Guava-14.0-rc1用于BiMap集合。

最佳答案

根据您的评论,在您的工作流中,访问ID是一个键,而不是一个值,至少在一种情况下,它具有多个关联值而不是一个。

您可以使用Multimap作为访问IDS,假设您随后可以选择保留哪个值作为访问其他Map(或BiMap)的键,尽管通过示例尚不清楚为什么它们是 s,但我想这是无关的)。

ImmutableMultimap.Builder<String, String> builder = ImmutableMultimap.builder();
builder.put("FOO", "accessId 1");
builder.put("BAR", "accessId 1");
ImmutableMultimap<String, String> accessIds = builder.build();
ImmutableMultimap<String, String> byAccessIds = accessIds.inverse();

Collection<String> keys = byAccessIds.get("accessId 1"); // ["FOO", "BAR"]
String key = doSomething(keys); // "BAR" is chosen
String merchant = merchants.get(key); // "merchant 2"


如果您不能使用不可变的结构,则还可以为BiMap构建常规的Multimap(例如,使用accessIds),然后使用HashMultimap对其进行逆转。

关于java - 如何使用共享 key 正确关联多个BiMap集合?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14818656/

10-10 08:39