Java:如何使用Google的HashBiMap?

时间:2010-04-04 14:21:21

标签: java guava

键是一个文件和一个单词。该文件提供文件中的所有单词。这个词给出了所有包含这个词的文件。我不确定域和共域部分。我希望K的类型为<String>,V的类型为<HashSet<FileObject>>

    public HashBiMap<K<String>,V<HashSet<FileObject>>> wordToFiles 
            = new HashBiMap<K<String>,V<HashSet<FileObject>>>();

    public HashBiMap<K<String>,V<HashSet<FileObject>>> fileToWords 
            = new HashBiMap<K<String>,V<HashSet<FileObject>>>();

Google's HashBiMap.

2 个答案:

答案 0 :(得分:15)

将其更改为

public HashBiMap<String,HashSet<FileObject>> wordToFiles = HashBiMap.create ();

但它看起来仍然很奇怪。我想你应该使用另一个系列。来自BiMap文档(HashBiMap要求BiMap):

  

bimap(或“双向地图”)是一个   保留唯一性的地图   它的价值以及它的价值   键。此约束启用了bimaps   支持“逆视图”,即   另一个含有相同的bimap   作为这个bimap的条目,但有   反转键和值。

我不知道您要解决的问题,但在查看您的代码后,我建议您考虑使用Multimaps。来自其文档:

  

类似于地图的集合,但是   这可能会关联多个值   用一把钥匙。如果你叫put(K,   V)两次,使用相同的键但是   不同的值,多​​图   包含从键到两者的映射   值。

例如,您可以执行以下操作:

Multimap<String, FileObject> wordToFiles = HashMultimap.create();
wordToFiles.put("first", somefile);
wordToFiles.put("first", anotherfile);
for (FileObject file : wordToFiles.get("first"){
   doSomethingWithFile (file);
}

答案 1 :(得分:10)

将此依赖项添加到您的&#39; build.gradle&#39;

compile 'com.google.guava:guava:19.0'

导入BiMap和HashBiMap

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;

创建bimap

BiMap<String, String> myBiMap = HashBiMap.create();

加上一些值

myBiMap.put("key", "value");

按键获取映射值

myBiMap.get("key");

按值获取映射

myBiMap.inverse().get("value");