0

次の 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 2FOO

これら 2 つのコレクションが実際には同じキーを共有していないと誰かが指摘する前に、BiMap は一意の値を強制するため"BAR","accessId 1"、コレクションにリストできないことを覚えておいてください。

BiMap が適切なコレクションであるとは確信していませんが、そのinverse()メソッドを利用しています。より適切なコレクション (または私が見落としている他の方法) がある場合は、お知らせください。

参考までに: BiMap コレクションには Guava-14.0-rc1 を使用しています。

4

1 に答える 1

1

あなたのコメントに基づいて、あなたのワークフローでは、アクセス ID は値ではなくキーであり、少なくとも 1 つのケースでは 1 つではなく複数の関連する値があります。

アクセス IDS にaMultimapを使用できますが、他の s にアクセスするためのキーとして保持する値を選択できると仮定しますMap(またはs ですが、例ではそれらBiMaps である理由は不明ですが、それは無関係だと思います)。 BiMap

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の for を作成しaccessIds(たとえば、 を使用HashMultimap)、 を使用して逆にすることもできますMultimaps.invertFrom()

于 2013-02-12T10:59:40.177 に答える