java8 Maps获取过滤需要的内容

该博客演示了如何在Java中从JSON对象列表中过滤并提取特定字段。使用Stream API和Map操作,分别展示了filterFieldMap和filterFieldInfo两种方法,实现对Map列表的字段筛选。这两种方法都能有效地获取所需字段,但filterFieldMap方法更为灵活,适用于更多场景。
摘要由CSDN通过智能技术生成

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方法会更灵活,也容易处理其他的情况。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值