Java 映射值在数组中。需要将所有值转换为列表,并将所有值合并为结果列表
我有一个以数组作为值的映射。现在,所有这些数组都需要转换为列表。最后,所有列表应合并为一个列表 现在有了Java 映射值在数组中。需要将所有值转换为列表,并将所有值合并为结果列表,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个以数组作为值的映射。现在,所有这些数组都需要转换为列表。最后,所有列表应合并为一个列表 现在有了 Map<String, Class1[]> master_map= new HashMap<>(); Class1 c1 = new Class("Name1", "Address1"); Class1 c2 = new Class("Name2", "Address2"); ClassArray[0] = c1; ClassArray[1]= c2; master
Map<String, Class1[]> master_map= new HashMap<>();
Class1 c1 = new Class("Name1", "Address1");
Class1 c2 = new Class("Name2", "Address2");
ClassArray[0] = c1;
ClassArray[1]= c2;
master_map.put("FirstValue", ClassArray);
Class1 c3 = new Class("Name3", "Address3");
Class1 c4 = new Class("Name4", "Address4");
ClassArray[0] = c3;
ClassArray[1]= c4;
master_map.put("SecondValue", ClassArray);}
现在我想得到如下结果
List<Class1> result = new ArrayList<>();
//This above list to be as {c1, c2, c3, c4}
除了java8中的代码,您可以使用entry set和每个值迭代映射。数组您可以使用Arrays.asList将其转换为列表,并将其添加到最终列表中
Map<String , Integer[]> hm = new HashMap<String,Integer[]>();
List<Integer> finalList = new ArrayList<Integer>();
for(Entry<String, Integer[]> entry:hm.entrySet()) {
finalList.addAll(Arrays.asList(entry.getValue()));
}
通过使用并行流,可以这样做
Map<String , Integer[]> hm = new HashMap<String,Integer[]>();
List<Integer> finalList = hm.values().parallelStream().flatMap(Arrays::stream).collect(Collectors.toList())
这是整数数组的简单示例。您可以参考此信息并得出解决方案。您需要在条目流中展平内部数组:
List<Class1> result = master_map.values()
.stream()
.flatMap(Arrays::stream) //use flatMap to flatten nested stream
.collect(Collectors.toList());
还有另一个Java 8的简单变体:
List<Class1> result = new ArrayList<>();
master_map.entrySet().stream().forEach(element -> {
result.addAll(Arrays.asList(element.getValue()));
});
另一个例子
List<Class1> x = new ArrayList<>();
master_map.forEach((k,v) -> x.addAll(Arrays.asList(v)));
不是很确定,但你只是在寻找数组。asListclassArray?你一定已经意识到你真的不需要那里的键k,所以也许只是在这些值上迭代就能清除它?