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,所以也许只是在这些值上迭代就能清除它?