Java: как использовать Google HashBiMap? - PullRequest
4 голосов
/ 04 апреля 2010

Ключи - это файл и слово. Файл дает все слова внутри файла. Слово дает все файлы, имеющие слово. Я не уверен в части домена и совместной части. Я хочу, чтобы 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 HashBiMap.

Ответы [ 2 ]

15 голосов
/ 04 апреля 2010

изменить на

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

Но все равно это выглядит очень странно. Я думаю, что вы должны использовать другую коллекцию. Из BiMap документации (HashBiMap имплементаций BiMap):

Двунаправленная карта (или «двунаправленная карта») карта, которая сохраняет уникальность его ценности, а также его ключи. Это ограничение включает бимапс поддерживать "обратный взгляд", который другой бимап, содержащий тот же записи, как этот BIMAP, но с перевернутые ключи и значения.

Я не знаю проблему, которую вы хотите решить, но после просмотра вашего кода я могу предложить рассмотреть возможность использования Multimaps. Из его документов:

Коллекция, похожая на карту, но который может связывать несколько значений с одним ключом. Если вы звоните положить (K, V) дважды, с тем же ключом, но разные значения, мультикарта содержит сопоставления от ключа к обоим значения.

Например, вы можете сделать что-то вроде этого:

Multimap<String, FileObject> wordToFiles = HashMultimap.create();
wordToFiles.put("first", somefile);
wordToFiles.put("first", anotherfile);
for (FileObject file : wordToFiles.get("first"){
   doSomethingWithFile (file);
}
10 голосов
/ 05 сентября 2016

Добавьте эту зависимость к вашему build.gradle

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

импорт BiMap и HashBiMap

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

Создать бимап

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

Введите некоторые значения

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

Получить значение сопоставления по ключу,

myBiMap.get("key");

Получить отображение по значению,

myBiMap.inverse().get("value");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...