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

一、排序

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":"三"}]

猜你喜欢

转载自blog.csdn.net/weixin_43948460/article/details/129125501