reversing keys/values - create new instance of Has

2019-09-10 21:14发布

问题:

I’ve got an existing instance of HashMap simply called sale (it is Map<String, Set<String>>) I use it to log customers and items history.

Is there a way to create a new instance of HashMap, that effectively reverses this usage? i.e will show each item purchased as a unique key and the corresponding value as a String set of the customers that have purchased that product. I suspect there is a simple process using keySet() in some way to iterate over the sales map but I just can’t see how to do this. Any help would be much appreciated.

回答1:

do you mean you want some thing like Map, String> !!

Thn you can iterate over existing map and put reversed key values in a new map

Example:

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);

}


回答2:

I think it would be more of something like that:

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);
    }
}


标签: java hashmap