java8 Stream流的filter方法过滤数据

jdk1.8以上才能使用,叫内部迭代

没有写类,直接写的map,实体类也是可以用的

这样看起来简洁一点

 

public static void main(String args[]){
        List<Map<String,Object>> list=new ArrayList<>();
        for(int i=0;i<5;i++){
            Map<String,Object> map=new HashMap<>();
            map.put("type",i);
            list.add(map);
        }
        System.out.println("list过滤前的数据:"+list);
        System.out.println("list过滤前的数量:"+list.size());
        //过滤获取 type=2的数据
        List<Map<String,Object>> list2 = list.stream().filter((Map a) -> ("2".equals(a.get("type").toString()))).collect(Collectors.toList());
        //只获取数量也可以这样写
        Long list2Count = list.stream().filter((Map a) -> ("2".equals(a.get("type").toString()))).count();
        System.out.println("list过滤后的数据:"+list2);
        System.out.println("list过滤后的数量:"+list2Count);
        System.out.println("list过滤后的数量:"+list2.size());
   }

效果图

 

JSONArray数据使用Stream filter

@org.junit.Test
    public void t3() {
        //初始化数据
        JSONArray listD = new JSONArray() {{
            add(new JSONObject() {{
                put("STATUS", "Y");
                put("DOC_NO", "1");
            }});
            add(new JSONObject() {{
                put("STATUS", "N");
                put("DOC_NO", "2");
            }});
        }};
        //1. JSONArray->JSONObject->JSONArray 自定义获取STATUS=Y的数据
        JSONArray listD1 = listD.stream().filter(a -> {
            JSONObject jsona = (JSONObject) a;
            //如果STATUS=Y 则返回true
            if (jsona.getString("STATUS").equals("Y")) {
                return true;
            } else {
                //如果STATUS!=Y 则返回false  抛掉该数据
                return false;
            }
        }).collect(Collectors.toCollection(JSONArray::new));
        //2. JSONArray->Map->JSONArray 自定义获取STATUS=Y的数据
        JSONArray listD2 = listD.stream().map(obj -> {
            Map<String, Object> returnObj = new JSONObject();
            //强制转换obj
            Map<String, Object> jsonObj = (JSONObject) obj;
            jsonObj.forEach((key, val) -> {
                //如果STATUS=Y 则put到 returnObj 中
                if ("STATUS".equals(key) && "Y".equals(val)) {
                    returnObj.put(key, (val));
                }
            });
            return returnObj;
        }).collect(Collectors.toCollection(JSONArray::new));

        log.info("\nlistD{}", listD);
        log.info("\nlistD1{}", listD1);
        log.info("\nlistD2{}", listD2);
    }

执行结果:

2021-01-11 15:32:21.533  INFO   --- [           main] com.erp.azwmsmybatis.Test                : 
listD[{"DOC_NO":"1","STATUS":"Y"},{"DOC_NO":"2","STATUS":"N"}]
2021-01-11 15:32:21.573  INFO   --- [           main] com.erp.azwmsmybatis.Test                : 
listD1[{"DOC_NO":"1","STATUS":"Y"}]
2021-01-11 15:32:21.576  INFO   --- [           main] com.erp.azwmsmybatis.Test                : 
listD2[{"STATUS":"Y"},{}]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

筑基始,仙魔终

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

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

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

打赏作者

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

抵扣说明:

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

余额充值