Maps获取过滤需要的内容
在使用中,需要对Map获取需要的字段。比如有五个字段的内容,只要获取三个内容。
代码;
public static void main(String[] args) {
String data = "[{\"staff_name\":\"feng\",\"org_id\":2015,\"staff_id\":12},{\"staff_name\":\"lang\",\"org_id\":2016,\"staff_id\":4565123},{\"staff_name\":\"yan\",\"org_id\":2017,\"staff_id\":9852314}]";
System.out.println("====== oriList =======");
System.out.println("source: "+data);
List<Map<String,Object>> dataList = GoJsonUtils.changeJsonToList(data);
List<String> fieldList = Lists.newArrayList("staff_name", "org_id");
System.out.println("====== filterFieldMap =======");
List<Map<String, Object>> filterResult = filterFieldMap(dataList, fieldList);
System.out.println("result: "+filterResult);
System.out.println("====== filterFieldInfo =======");
filterResult = filterFieldInfo(dataList, fieldList);
System.out.println("result: "+filterResult);
}
private static List<Map<String, Object>> filterFieldMap(List<Map<String, Object>> dataList, List<String> fieldList) {
return ListUtils
.emptyIfNull(dataList).stream().filter(Objects::nonNull).map(e -> {
Map<String, Object> maps = ListUtils.emptyIfNull(fieldList).stream().map(field -> {
Map<String, Object> single = new HashMap<>();
Object result = e.get(field);
single.put(field, result);
return single;
}).collect(HashMap::new, HashMap::putAll, HashMap::putAll);
return maps;
}).collect(Collectors.toList());
}
private static List<Map<String, Object>> filterFieldInfo(List<Map<String, Object>> dataList, List<String> fieldList) {
return ListUtils
.emptyIfNull(dataList).stream().filter(Objects::nonNull).map(e -> MapUtils.emptyIfNull(e).entrySet().stream().filter(t -> fieldList.contains(t.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))).collect(Collectors.toList());
}
结果:
====== oriList =======
source: [{"staff_name":"feng","org_id":2015,"staff_id":12},{"staff_name":"lang","org_id":2016,"staff_id":4565123},{"staff_name":"yan","org_id":2017,"staff_id":9852314}]
====== filterFieldMap =======
result: [{staff_name=feng, org_id=2015}, {staff_name=lang, org_id=2016}, {staff_name=yan, org_id=2017}]
====== filterFieldInfo =======
result: [{staff_name=feng, org_id=2015}, {staff_name=lang, org_id=2016}, {staff_name=yan, org_id=2017}]
备注:
Gson的引用处理看 字符串变成List类型
总结:
使用filterFieldInfo方法是容易想到的,filterFieldMap方法会更灵活,也容易处理其他的情况。