首页 前端知识 JSONArray操作汇总,排序,筛选,分组

JSONArray操作汇总,排序,筛选,分组

2024-05-09 11:05:04 前端知识 前端哥 721 675 我要收藏

JSONArray操作汇总

  • 一、排序
    • 1.根据集合对象中某一对象属性进行排序,返回新的集合
    • 2.List进行排序,返回新的List 注意:并没有改变原始list的顺序
  • 二、筛选
    • 1.获取集合对象中某一属性值
    • 2.获取集合对象中某一属性值并去重,返回Set集合
    • 3.筛选集合对象中某一属性值符合判断条件的对象
  • 三、分组
    • 1.根据集合对象中某一属性进行分组
  • 四、操作集合对象中属性值
    • 1.根据集合对象中某一特定属性条件,修改对象值

一、排序

1.根据集合对象中某一对象属性进行排序,返回新的集合

    public static void main(String[] args) {
        JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
        System.out.println("初始化的JSONArray:" + jsonArray.toJSONString());
        JSONArray newJSONArray = jsonArray.stream().sorted(
                Comparator.comparingLong(
                		// 根据对象中的ID进行排序
                        e -> JSONObject.parseObject(e.toString()).getLongValue("ID")
                )
        ).collect(Collectors.toCollection(JSONArray::new));
        System.out.println("排序后的newJSONArray:" + newJSONArray.toJSONString());
    }

输出结果

初始化的JSONArray:[{"ID":"3","NAME":"三"},{"ID":"2","NAME":"二"},{"ID":"1","NAME":"一"}]
排序后的newJSONArray:[{"ID":"1","NAME":"一"},{"ID":"2","NAME":"二"},{"ID":"3","NAME":"三"}]

2.List进行排序,返回新的List 注意:并没有改变原始list的顺序

    public static void main(String[] args) {
        List<Integer> integerList1 = new ArrayList<>();
        integerList1.add(1);
        integerList1.add(5);
        integerList1.add(7);
        List<Integer> integerList2 = new ArrayList<>();
        integerList2.add(2);
        integerList2.add(4);
        integerList2.add(8);
        integerList1.addAll(integerList2);
        System.out.println("未排序的integerList1:" + integerList1);
        List<Integer> integerList3 = integerList1.stream().sorted().collect(Collectors.toList());
        System.out.println("升序排序integerList3:" + integerList3);
        List<Integer> integerList4 = integerList1.stream().sorted(Comparator.comparingInt(Integer::intValue).reversed()).collect(Collectors.toList());
        System.out.println("降序排序integerList4:" + integerList4);
        // 如果list存放的是对象,可以根据对象的某一个属性排序
//        List<User> listUser = new ArrayList<>();
//        List<Integer> integerList5 = listUser.stream().sorted((x,y) -> x.getAge().compareTo(y.getAge)).collect(Collectors.toList());
//        System.out.println("自定义排序integerList5:" + integerList5);
    }

输出结果

未排序的integerList1:[1, 5, 7, 2, 4, 8]
升序排序integerList3:[1, 2, 4, 5, 7, 8]
降序排序integerList4:[8, 7, 5, 4, 2, 1]

二、筛选

1.获取集合对象中某一属性值

    public static void main(String[] args) {
        JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
        System.out.println("初始化JSONArray:" + jsonArray.toJSONString());
        // 获取NAME属性
        // 方法一 优点是可以对属性值进行操作
        List<String> list = jsonArray.stream().map(obj -> {
            JSONObject jsonObj = (JSONObject) obj;
            return jsonObj.getString("NAME");
        }).collect(Collectors.toList());
        // 方法二 代码简洁
        List<String> list = jsonArray.stream().map(e -> ((JSONObject) e).getString("NAME")).collect(Collectors.toList());
        
        System.out.println("新的list:");
        for (String l : list) {
            System.out.println(l);
        }
    }

输出结果

初始化JSONArray:[{"ID":"3","NAME":"三"},{"ID":"3","NAME":"三"},{"ID":"2","NAME":"二"},{"ID":"1","NAME":"一"}]
新的list:
三
三
二
一

2.获取集合对象中某一属性值并去重,返回Set集合

注意:是无序的

public static void main(String[] args) {
        JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
        System.out.println("去重前的JSONArray:" + jsonArray.toJSONString());
        // 根据NAME去重
        Set<String> set = jsonArray.stream().map(obj -> {
            JSONObject jsonObj = (JSONObject) obj;
            return jsonObj.getString("NAME");
        }).collect(Collectors.toSet());
        System.out.println("去重后的set:");
        for (String s : set) {
            System.out.println(s);
        }
    }

输出结果

去重前的JSONArray:[{"ID":"3","NAME":"三"},{"ID":"3","NAME":"三"},{"ID":"2","NAME":"二"},{"ID":"1","NAME":"一"}]
去重后的set:
一
三
二

3.筛选集合对象中某一属性值符合判断条件的对象

    public static void main(String[] args) {
        JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
        System.out.println("初始化JSONArray:" + jsonArray.toJSONString());
        // 获取ID为"3"的对象
        JSONArray newJSONArray = jsonArray.stream().filter(
                item -> "3".equals(
                        JSONObject.parseObject(item.toString()).getString("ID")
                )
        ).collect(Collectors.toCollection(JSONArray::new));
        System.out.println("新的newJSONArray:" + newJSONArray.toJSONString());
    }

输出结果

初始化JSONArray:[{"ID":"3","NAME":"三"},{"ID":"3","NAME":"三"},{"ID":"2","NAME":"二"},{"ID":"1","NAME":"一"}]
新的newJSONArray:[{"ID":"3","NAME":"三"},{"ID":"3","NAME":"三"}]

三、分组

1.根据集合对象中某一属性进行分组

    public static void main(String[] args) {
        JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"3\",\"NAME\":\"三\"},{\"ID\":\"2\",\"NAME\":\"二\"},{\"ID\":\"1\",\"NAME\":\"一\"}]");
        System.out.println("初始化JSONArray:" + jsonArray.toJSONString());
        // 根据ID进行分组 这里value目前好像只能用List<Object>接
        Map<String, List<Object>> groupById = jsonArray.stream()
                .collect(Collectors.groupingBy(item -> JSON.parseObject(item.toString()).getString("ID")));
        System.out.println("JSONArray转map为:");
        for (String key : groupById.keySet()) {
            System.out.println("key:"+ key + ",value:" + groupById.get(key));
        }
    }

输出结果

初始化JSONArray:[{"ID":"3","NAME":"三"},{"ID":"3","NAME":"三"},{"ID":"2","NAME":"二"},{"ID":"1","NAME":"一"}]
JSONArray转map为:
key:1,value:[{"ID":"1","NAME":"一"}]
key:2,value:[{"ID":"2","NAME":"二"}]
key:3,value:[{"ID":"3","NAME":"三"}, {"ID":"3","NAME":"三"}]

四、操作集合对象中属性值

1.根据集合对象中某一特定属性条件,修改对象值

  1. JSONArray类型
	    /**
     	* 将年龄大于25岁的用户的年龄替换为30岁
     	* @param args
     	*/
	    public static void main(String[] args) {
        JSONArray jsonArray = JSON.parseArray("[{\"ID\":\"4\",\"NAME\":\"四\",\"age\":\"21\"},{\"ID\":\"3\",\"NAME\":\"三\",\"age\":\"36\"}," +
                "{\"ID\":\"2\",\"NAME\":\"二\",\"age\":\"15\"},{\"ID\":\"1\",\"NAME\":\"一\",\"age\":\"42\"}]");
        System.out.println("初始化JSONArray:" + jsonArray.toJSONString());
        jsonArray.stream()
                .filter(
                        item ->
                                // 判断年龄是否大于25
                                JSONObject.parseObject(item.toString()).getIntValue("age") > 25
                )
                .forEach(
                        item ->
                                // 将年龄替换为30
                                ((JSONObject) item).put("age", "30")
                );
        System.out.println("处理后的JSONArray:" + jsonArray.toJSONString());
    }

输出结果

初始化JSONArray:[{"ID":"4","age":"21","NAME":"四"},{"ID":"3","age":"36","NAME":"三"},{"ID":"2","age":"15","NAME":"二"},{"ID":"1","age":"42","NAME":"一"}]
处理后的JSONArray:[{"ID":"4","age":"21","NAME":"四"},{"ID":"3","age":"30","NAME":"三"},{"ID":"2","age":"15","NAME":"二"},{"ID":"1","age":"30","NAME":"一"}]
  1. List集合类型
 	/**
     * 将年龄大于25岁的用户的年龄替换为30岁
     *
     * @param args
     */
    public static void main(String[] args) {

        List<User> listUser = new ArrayList<>();
        User user1 = new User();
        user1.setId(1);
        user1.setAge(30);
        user1.setName("一");
        listUser.add(user1);
        User user2 = new User();
        user2.setId(2);
        user2.setAge(15);
        user2.setName("二");
        listUser.add(user2);
        User user3 = new User();
        user3.setId(3);
        user3.setAge(42);
        user3.setName("三");
        listUser.add(user3);
        // 将年龄大于25岁的用户的年龄替换为30岁
        listUser.stream().filter(user -> user.getAge() > 25).forEach(user -> user.setAget(30));
    }
转载请注明出处或者链接地址:https://www.qianduange.cn//article/7786.html
评论
发布的文章

JSON加密的看法

2024-05-14 23:05:47

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!