JSONArray Stream 添加过滤和删除的指定元素的功能

  JSONObject o1 = new JSONObject();
        o1.put("key", "2");
        o1.put("key2", "3");

        JSONObject o2 = new JSONObject();
        o2.put("key", "1");
        o2.put("key3", "3");



        JSONArray ja =  new JSONArray();
        ja.add(o1);
        ja.add(o2);


//        Iterator<Object> iterator = ja.stream().iterator();
//       Stream<Object> objectStream = ja.stream().filter(s -> "1".equals(((JSONObject) s).get("key")));

        boolean key = ja.removeIf(s -> "1".equals(((JSONObject) s).get("key")));
        System.out.println(key);
        for(int i =0; i<ja.size();i++) {
            JSONObject jsonObject = ja.getJSONObject(i);
            Set<Map.Entry<String, Object>> entries = jsonObject.entrySet();
            for (Map.Entry<String, Object> str : entries) {
                System.out.println(str.getValue());
            }
        }
    }

//关键字:removeIf 删除指定的key
//        boolean key = ja.removeIf(s -> "1".equals(((JSONObject) s).get("key")));
        //        for(int i =0; i<ja.size();i++) {
//            JSONObject jsonObject = ja.getJSONObject(i);
//            Set<Map.Entry<String, Object>> entries = jsonObject.entrySet();
//            for (Map.Entry<String, Object> str : entries) {
//                System.out.println(str.getValue());
//            }
//        }
        //获取第一个findFirst
        //获取最后一个findLast
//        JSONArray jsonArray = JSONArray.parseArray("[{\"name\":\"草根\",\"sex\":\"man\",\"date\":\"2018-01-01\"},{\"name\":\"merry\",\"sex\":\"woman\",\"date\":\"2017-01-01\"},{\"name\":\"liming\",\"sex\":\"woman\",\"date\":\"2016-01-01\"}]");
//        JSONObject jsonObject = (JSONObject)jsonArray.stream().sorted((a,b) -> -1).findFirst().get();
//        System.out.println(jsonObject);
        //清空json对象中的某个数组
//        JSONObject jsonObject = JSONObject.parseObject("{\"1\": {\"name\":\"maple\",\"sex\":\"man\",\"childrens\":[{\"name\":\"草根\",\"sex\":\"man\",\"date\":\"2018-01-01\"},{\"name\":\"merry\",\"sex\":\"woman\",\"date\":\"2017-01-01\"},{\"name\":\"liming\",\"sex\":\"woman\",\"date\":\"2016-01-01\"}]}}");
//        jsonObject.forEach((key, val) -> {
//            JSONObject obj = (JSONObject) val;
//            JSONArray array = obj.getJSONArray("childrens");
//            array.clear();
//            obj.put("childrens",array);
//        });
//        System.out.println(jsonObject);
        //过滤数据并按时间字符串排序
        JSONObject jsonObject = JSONObject.parseObject("{\"1\": {\"name\":\"maple\",\"sex\":\"man\",\"childrens\":[{\"name\":\"草根\",\"sex\":\"man\",\"date\":\"2018-01-01\"},{\"name\":\"merry\",\"sex\":\"woman\",\"date\":\"2017-01-01\"},{\"name\":\"liming\",\"sex\":\"woman\",\"date\":\"2016-01-01\"}]}}");
        System.out.println(jsonObject);
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Comparator<Object> dateComparator = (a, b) -> {
            int result = 0;
            try {
                Date dt1 = df.parse(((JSONObject)a).getString("date"));
                Date dt2 = df.parse(((JSONObject)b).getString("date"));
                result = dt1.compareTo(dt2);
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                return result;
            }
        };
        jsonObject.forEach((key, val) -> {
            JSONObject obj = (JSONObject) val;
            if (obj.getJSONArray("childrens") != null) {
                JSONArray array = obj.getJSONArray("childrens");
                array = array.stream().filter(arrObj -> !"merry".equals(((JSONObject) arrObj).getString("name")))
                        .sorted(dateComparator)
                        .collect(Collectors.toCollection(JSONArray::new));
                obj.put("childrens", array);
            } else {
                obj.put("childrens", new JSONArray());
            }
        });
        System.out.println(jsonObject);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值