如何在java中创建反向映射?

如何在java中创建反向映射?,java,java-7,Java,Java 7,我有一个带有“任务”的映射:[“epochdate1”、“epochdate2”]如何反转此映射 比如说 task_1 => [date1, date2, date3, date5] task_2 => [date4, date5] task_3 => [date2, date3, date5] task_4 => [date4, date5] 当它反转时,它将 date1 => [task_1] date2 => [task_1, task_3] date

我有一个带有
“任务”的映射:[“epochdate1”、“epochdate2”]
如何反转此映射

比如说

task_1 => [date1, date2, date3, date5]
task_2 => [date4, date5]
task_3 => [date2, date3, date5]
task_4 => [date4, date5]
当它反转时,它将

date1 => [task_1]
date2 => [task_1, task_3]
date3 => [task_1, task_3]
date4 => [task_2, task_4]
date5 => [task_1, task_2, task_3, task_4]
代码

publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
Map myMap=newhashmap();
ArrayList t1List=新的ArrayList();
t1List.添加(“日期1”);
T1列表。添加(“日期2”);
T1列表。添加(“日期3”);
t1List.添加(“日期5”);
ArrayList t2List=新的ArrayList();
t2列表。添加(“日期4”);
t2列表。添加(“日期5”);
ArrayList t3List=新的ArrayList();
T3列表。添加(“日期2”);
T3列表。添加(“日期3”);
T3列表。添加(“日期5”);
ArrayList t4List=新的ArrayList();
T4表。添加(“日期4”);
T4表。添加(“日期5”);
myMap.put(“任务1”,t1List);
myMap.put(“任务2”,t2List);
myMap.put(“任务3”,t3List);
myMap.put(“任务4”,t4List);
Map reversedMap=Test.getReversedMap(myMap);
}
只要实现它:

Map<String, ArrayList<String>> getReversedMap(Map<String, ArrayList<String>> myMap){
      Map<String, ArrayList<String>> result = new HashMap<>();
      for(String key : myMap.keySet()){
          for(String val : myMap.get(key)){
              if(!result.containsKey(val)){
                  result.put(val, new ArrayList());
              }
              result.get(val).add(key);
          }
      }
      return result;
}
Map getReversedMap(Map myMap){
映射结果=新的HashMap();
for(字符串键:myMap.keySet()){
for(字符串val:myMap.get(键)){
如果(!result.containsKey(val)){
result.put(val,newarraylist());
}
结果.get(val).add(key);
}
}
返回结果;
}
只要实现它:

Map<String, ArrayList<String>> getReversedMap(Map<String, ArrayList<String>> myMap){
      Map<String, ArrayList<String>> result = new HashMap<>();
      for(String key : myMap.keySet()){
          for(String val : myMap.get(key)){
              if(!result.containsKey(val)){
                  result.put(val, new ArrayList());
              }
              result.get(val).add(key);
          }
      }
      return result;
}
Map getReversedMap(Map myMap){
映射结果=新的HashMap();
for(字符串键:myMap.keySet()){
for(字符串val:myMap.get(键)){
如果(!result.containsKey(val)){
result.put(val,newarraylist());
}
结果.get(val).add(key);
}
}
返回结果;
}

没有捷径可走。您必须迭代原始地图的条目集,对于找到的每个日期值,在新地图中添加一个新条目,匹配的任务作为第一个值,或者如果日期已经在新地图中,则将任务添加到现有条目的列表中。

没有捷径可走。您必须迭代原始地图的入口集,对于您找到的每个日期值,在新地图中放置一个新条目,匹配的任务作为第一个值,或者如果日期已经在新地图中,则将任务添加到现有条目的列表中。

我将使用番石榴进行此操作。尝试以下方法:

Map<K, V> map = ...;
ListMultimap<V, K> inverse = Multimaps.invertFrom(Multimaps.forMap(map), 
ArrayListMultimap.<V,K>create());
Map=。。。;
ListMultimap inverse=多重映射.inversfrom(多重映射.forMap(映射)),
ArrayListMultimap.create());

我会用番石榴做这个。尝试以下方法:

Map<K, V> map = ...;
ListMultimap<V, K> inverse = Multimaps.invertFrom(Multimaps.forMap(map), 
ArrayListMultimap.<V,K>create());
Map=。。。;
ListMultimap inverse=多重映射.inversfrom(多重映射.forMap(映射)),
ArrayListMultimap.create());