我有一个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);
任何想法?
亲切
答案 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());