有什么方法可以从HashMap的ArrayList的HashMap中获取值列表吗?

时间:2019-12-26 11:52:44

标签: java arrays list arraylist hashmap

我想从第三方API获得的响应中获取数据传输对象的列表。 第三方API响应的结构如下:

Map<String,Object>
{
    {
        String -> ArrayList{
                        <Key,Value(DTO)>,
                        <Key,Value(DTO)>,
                        <Key,Value(DTO)>,
                        ...
                    }
    },

    {
        String -> Hashmap
    }
}

响应类型:Map(String,Object)

我有两个键值对。 1(String,ArrayList(HashMap(s)...)),2(String,HashMap)

现在,我需要所有 ArrayList HashMaps 的值的列表。

我希望列表为:

List<DTO>{
    {
        "key":"value",
        "key":"value"
    },
    {
        "key":"value",
        "key":"value",
        "key":"value",
        "key":"value"
    }
}

来自api的示例响应:

{ "one": [ 0 : { "id":"435453ty5g8437t5g734tr", "name":"name1", "address":"add", "field":"new field" }, 1: { "id":"4fr74g8fg48346rt83486tf", "name":"name2", "address":"add1", "field":"new field22" } ], 
 "meta": { "current_page":1, "records_per_page":20, "total_records":null } }

我的需要:

[ { "id":"435453ty5g8437t5g734tr", "name":"name1", "address":"add", "field":"new field" }, 
  { "id":"4fr74g8fg48346rt83486tf", "name":"name2", "address":"add1", "field":"new field22" } ] 

1 个答案:

答案 0 :(得分:1)

您可以:

  1. 过滤值为List的条目
  2. Object映射到List<Map<String, DTO>>
  3. flatMap将所有地图放到同一流中
  4. 收集全部

这是未经检查的版本,适用于List

的通用类型
List<Map<String, DTO>> result =
         content.values().stream()
                         .filter(value -> value instanceof List)
                         .map(value -> (List<Map<String, DTO>>) value)
                         .flatMap(List::stream)
                         .collect(Collectors.toList());

System.out.println(result);
  

> Online Demo