使用java8从Hashmap的ArrayList中提取值

时间:2016-07-21 22:41:52

标签: java arraylist hashmap java-8 java-stream

我有一个HashMap的数组列表

如何使用java 8和.map .filter技术在HashMap中获取某个值的StringList

例如

字符串数据等于

[{
    "schema": [{
        "name": "#VALUE",
        "dataType": {},
        "nullable": true,
        "metadata": {
            "map": {}
        }
    }, {
        "name": "@ref",
        "dataType": {},
        "nullable": true,
        "metadata": {
            "map": {}
        }
    }],
    "values": [null, 442256]
}, {
    "schema": [{
        "name": "#VALUE",
        "dataType": {},
        "nullable": true,
        "metadata": {
            "map": {}
        }
    }, {
        "name": "@ref",
        "dataType": {},
        "nullable": true,
        "metadata": {
            "map": {}
        }
    }],
    "values": [null, 4192463331]
}, {
    "schema": [{
        "name": "#VALUE",
        "dataType": {},
        "nullable": true,
        "metadata": {
            "map": {}
        }
    }, {
        "name": "@ref",
        "dataType": {},
        "nullable": true,
        "metadata": {
            "map": {}
        }
    }],
    "values": [null, 34817060]
}, {
    "schema": [{
        "name": "#VALUE",
        "dataType": {},
        "nullable": true,
        "metadata": {
            "map": {}
        }
    }, {
        "name": "@ref",
        "dataType": {},
        "nullable": true,
        "metadata": {
            "map": {}
        }
    }],
    "values": [null, 291594905]
}]

结果

["442256","4192463331","34817060","291594905"]

我的代码的这部分但没有工作

    Stream.of(mapper.readValue(mapper.writeValueAsString(data),ArrayList.class))
            .filter(c -> c instanceof ArrayList<?>)
            .map(ArrayList.class::cast)
            .map(c -> 
                    c.forEach(f -> { Stream.of(mapper.readValue(mapper.writeValueAsString(f),HashMap.class))
                                    .filter(f -> f instanceof HashMap<?,?>)
                                    .map(HashMap.class::cast)
                                    ...
                                }
                            )
                )
            .forEach(System.out::println);

任何想法?

亲切

1 个答案:

答案 0 :(得分:2)

你问题中的代码非常令人困惑,但如果我从字面上理解你问的问题,那么,给定一个List<Map<String, String>>如何得到代表地图中所有值的List<String>对于给定的密钥?&#34;如果这实际上是您的问题,尽管与您的代码不匹配,那么这是一个答案:

List<Map<String, String>> listOfMaps;
List<String> valuesMatchingKey = listOfMaps.stream()
    .filter(map -> map.containsKey("Key"))
    .map(map -> map.get("Key"))
    .collect(Collectors.toList());