我有以下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/