使用stream流对list进行filter,sorted操作。
使用到的list如下:
list:
[
{
"id":"hl",
"aa":"xx",
"bb":"",
"cc":""
},
{
"id":"hm",
"aa":"xx1",
"bb":"",
"cc":""
},
{
"id":"dh",
"aa":"x2",
"bb":"",
"cc":""
}
]
aaList:["xx","x2"]
第一个目标: 在list中过滤掉aaList不存在的map数据,aaList中的数据对应list中的’aa’字段。使用stream流的filter属性:
list.stream()
.filter(i -> aaList.contains(i.get("aa")))
.collect(Collectors.toList())
结果如下:
list:
[
{
"id":"hl",
"aa":"xx",
"bb":"",
"cc":""
},
{
"id":"dh",
"aa":"x2",
"bb":"",
"cc":""
}
]
第二个目标: list按照idList顺序进行排序,idList中的数据对应list中的’id’字段。使用stream流的sorted属性:(此时的list为第一个目标的结果list)
idList:["dh","hl"]
list.stream()
.sorted(Comparator.comparing(m -> idList.indexOf(m.get("id"))))
.collect(Collectors.toList())
结果如下:
[
{
"id":"dh",
"aa":"x2",
"bb":"",
"cc":""
},
{
"id":"hl",
"aa":"xx",
"bb":"",
"cc":""
}
]
第三个目标:list中的map只取与columnMap中‘dataitem’值的相同的字段,columnMap中‘dataitem’属性值value对应list的key。
(此时的list为第二个目标的结果list)实现如下:
columnMap
[
{
"id":"",
"dataitem":"aa"
},
{
"id":"",
"dataitem":"bb"
}
]
list.stream()
.map(s -> {
Map<String, String> v = new HashMap<>();
columnMap.forEach(col -> v.put(col.get("dataitem"), s.get(col.get("dataitem"))));
return v;
})
.collect(Collectors.toList())
结果如下:
[
{
"aa":"x2",
"bb":""
},
{
"aa":"xx",
"bb":""
}
]