реверсирование ключей / значений - создайте новый экземпляр HashMap - PullRequest
0 голосов
/ 19 марта 2010

У меня есть существующий экземпляр HashMap, просто называемый продажей (it is Map<String, Set<String>>) Я использую его для записи истории клиентов и товаров.

Есть ли способ создать новый экземпляр HashMap, который эффективно отменяет это использование? то есть каждый элемент, купленный в качестве уникального ключа, будет отображаться в виде строки String клиентов, которые приобрели этот продукт. Я подозреваю, что есть простой процесс, использующий keySet () для перебора карты продаж, но я просто не вижу, как это сделать. Любая помощь будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 19 марта 2010

Я думаю, это было бы что-то вроде этого:

Map<String,Set<String>> result = new HashMap<String,Set<String>>();
for (Map.Entry<String,Set<String>> entry: salesMap.entrySet()) {
    String cust = entry.getKey();
    Set<String> items = entry.getValue();
    for (String item: items) {
        Set<String> customers = result.get(item);
        if (customers == null) {
            customers = new HashSet<String>();
            result.put(item, customers);
        }
        customers.add(cust);
    }
}
0 голосов
/ 19 марта 2010

Вы хотите сказать, что вам нужно что-то вроде Map, String> !!

Чем вы можете перебирать существующую карту и помещать значения обратных ключей в новую карту

Пример:

Map<Set<String>, String> somemap = new HashMap<Set<String>, String>();
foreach(Map.entry entry : existingMap.entrySet()) {
  Set<String> value = entry.getValue();
  String key = entry.getKey();
  somemap.put(value,key);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...