我有一张"task(s)": ["epochdate1", "epochdate2"]
的Map,我如何反转(invert)这张Map?
例如
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]
型
代码
public static void main(String[] args) {
Map<String, ArrayList<String>> myMap = new HashMap<String, ArrayList<String>>();
ArrayList<String> t1List = new ArrayList<String>();
t1List.add("date1");
t1List.add("date2");
t1List.add("date3");
t1List.add("date5");
ArrayList<String> t2List = new ArrayList<String>();
t2List.add("date4");
t2List.add("date5");
ArrayList<String> t3List = new ArrayList<String>();
t3List.add("date2");
t3List.add("date3");
t3List.add("date5");
ArrayList<String> t4List = new ArrayList<String>();
t4List.add("date4");
t4List.add("date5");
myMap.put("task_1", t1List);
myMap.put("task_2", t2List);
myMap.put("task_3", t3List);
myMap.put("task_4", t4List);
Map<String, ArrayList<String>> reversedMap = Test.getReversedMap(myMap);
}
型
4条答案
按热度按时间f4t66c6m1#
只需执行它:
字符串
fquxozlt2#
没有捷径可走,你必须遍历原始Map的entrySet,对于你找到的每个日期值,在新Map中放置一个新条目,匹配的任务作为第一个值,或者如果日期已经在新Map中,则将任务添加到现有条目的列表中。
fsi0uk1n3#
我会用Guava来做这个。试试这样的:
字符串
dwthyt8l4#
下面是Java 8+中使用流的解决方案:
字符串
分步分解
1.将Map转换为条目流
1.将每个条目拆分为值列表
中的每个项目的单独项目
1.将这些条目分组到一个新的Map中,其中键等于以前的值,值包含Map到该值的每个原始键的列表。