从地图转换为arraylist

时间:2018-05-09 07:21:37

标签: java

我尝试转换Map<String,ArrayList<Object>&gt;使用以下代码发送到ArrayList<Object>

Collection<ArrayList<Object>> coll = map().values();
List list = new ArrayList(coll);
ArrayList<Object> arrayList = new ArrayList<>(list.size());
arrayList.addAll(list);

然而,我得到的arraylist仍然按键分组对象仍然是集合。

如何转换为单独ArrayList的{​​{1}}?

3 个答案:

答案 0 :(得分:2)

您可以使用Java 8 Stream s:

List<Object> list =  map.values().stream()
                         .flatMap(ArrayList::stream)
                         .collect(Collectors.toList());

如果没有Stream,您就必须遍历第一个List的元素,并分别为每个元素调用arrayList.addAll()

答案 1 :(得分:0)

非流版本将是:

List<Object> accumulator = new ArrayList<>();
for(ArrayList<Object> a : map.values())
      accumulator.addAll(a);

答案 2 :(得分:0)

通过使用以下传统方法也可以实现相同的结果 -

Map<String, ArrayList<Object>> map = new HashMap<>();
        ArrayList<Object> objects1 = new ArrayList<>();
        objects1.add("data1");
        objects1.add("data2");
        objects1.add("data3");
        map.put("key1", objects1);
        ArrayList<Object> objects2 = new ArrayList<>();
        objects2.add("data1");
        objects2.add("data2");
        objects2.add("data3");
        map.put("key2", objects2);
        Collection<ArrayList<Object>> collections = map.values();
        List<Object> list = new ArrayList<>();
        for(ArrayList<Object> collection : collections) {
            for(Object obj : collection) {
                list.add(obj);
            }
        }
        System.out.println(list);

它会将输出打印为:

  

[data1,data2,data3,data1,data2,data3]