Java:如何使用Google的HashBiMap?

hhh*_*hhh 4 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>>>();
Run Code Online (Sandbox Code Playgroud)

谷歌的HashBiMap.

Rom*_*man 15

改为

public HashBiMap<String,HashSet<FileObject>> wordToFiles = HashBiMap.create ();
Run Code Online (Sandbox Code Playgroud)

但它看起来仍然很奇怪.我想你应该使用另一个系列.从BiMap文档(HashBiMapinslements BiMap):

bimap(或"双向映射")是一种映射,它保留其值及其键的唯一性.此约束使bimaps支持"反向视图",这是另一个包含与此bimap相同的条目但具有反向键和值的bimap.

我不知道你想要解决的问题,但在查看你的代码后,我建议考虑使用Multimaps.从它的文档:

类似于Map的集合,但可以将多个值与单个键相关联.如果使用相同的键但不同的值调用put(K,V)两次,则multimap包含从键到两个值的映射.

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

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


Sib*_*lil 11

将此依赖项添加到"build.gradle"

compile 'com.google.guava:guava:19.0'
Run Code Online (Sandbox Code Playgroud)

导入BiMap和HashBiMap

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
Run Code Online (Sandbox Code Playgroud)

创建一个bimap

BiMap<String, String> myBiMap = HashBiMap.create();
Run Code Online (Sandbox Code Playgroud)

提出一些价值观

myBiMap.put("key", "value");
Run Code Online (Sandbox Code Playgroud)

按键获取映射值,

myBiMap.get("key");
Run Code Online (Sandbox Code Playgroud)

按值获取映射,

myBiMap.inverse().get("value");
Run Code Online (Sandbox Code Playgroud)