我有以下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个集合共享相同的键,但值不同。
我遇到的问题是:如果我的accessIds键为merchant 2
,我怎样才能确保获得FOO
?
在有人指出这两个集合实际上没有共享相同的密钥之前,请记住BiMap强制执行唯一值,因此我无法在集合中列出"BAR","accessId 1"
。
我不相信BiMap是正确的集合,但我确实使用了它的inverse()
方法。如果有更适合的集合(或我忽略的其他方法),请告诉我。
仅供参考:我使用Guava-14.0-rc1作为BiMap系列。
答案 0 :(得分:1)
根据您的评论,在您的工作流程中,访问ID是一个键,而不是一个值,至少在一种情况下,它具有多个关联值而不是一个。
您可以使用Multimap
作为您的访问IDS,假设您可以选择要保留哪个值作为访问其他Map
(或BiMap
s的密钥,尽管它是通过你的例子不清楚为什么他们 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"
如果您不能使用不可变结构,您还可以为Multimap
构建常规accessIds
(例如使用HashMultimap
)并使用Multimaps.invertFrom()
反转它。