JAVA 集合自定义多条件排序

  使用 Collections.sort() 对集合进行排序,自定义 comparator 比较器,若涉及多条件排序,结合 thenComparing 使用。

在这里插入图片描述

实例:根据 areaid 和 storeno 排序,即 order by areaid desc, storeno desc
 @RequestMapping(value = "/api/sortTest", method = RequestMethod.POST)
    private List sortTest() {
        List list = new ArrayList();
        JSONObject oo1 = new JSONObject();
        oo1.put("areaid", 101);
        oo1.put("storeno", 222);

        JSONObject oo2 = new JSONObject();
        oo2.put("areaid", 102);
        oo2.put("storeno", 210);

        JSONObject oo3 = new JSONObject();
        oo3.put("areaid", 101);
        oo3.put("storeno", 220);

        list.add(oo1);
        list.add(oo2);
        list.add(oo3);

        Collections.sort(list, ((Comparator<JSONObject>) (o1, o2) -> {
            Integer areaid1 = o1.getInteger("areaid");
            Integer areaid2 = o2.getInteger("areaid");
            return areaid1 - areaid2;  // 升序
        }).thenComparing((o1, o2) -> {
            Integer storeno1 = o1.getInteger("storeno");
            Integer storeno2 = o2.getInteger("storeno");
            return storeno1 - storeno2; //升序
        }));

        return list;
        
    }
Java集合自定义排序可以使用 Comparator 或 Comparable 接口来实现。 如果使用 Comparator 接口,你可以创建一个实现了 Comparator 接口的类,并重写 compare 方法来定义排序规则。然后通过 Collections.sort 方法使用自定义的 Comparator 对象来对集合进行排序。例如,在引用中的示例中,我们创建了一个 Mycomparator 类来按照 Person 对象的年龄进行排序,并将其传递给 Collections.sort 方法来排序 ArrayList。 如果使用 Comparable 接口,你可以在对象类中实现 Comparable 接口,并重写 compareTo 方法来定义排序规则。然后通过 Collections.sort 方法来对集合进行排序。例如,在引用中的示例中,我们在 Person 类中实现了 Comparable 接口,并重写了 compareTo 方法来按照年龄从大到小进行排序。 另外,在 JDK 8 之后,还可以使用 Stream 流来实现排序功能。你可以使用 sorted 方法和 Comparator.comparing 方法来对集合进行排序。例如,在引用中的示例中,我们使用 Stream 排序对包含 Person 对象的 List 进行排序。 以上是几种常见的自定义排序方法,你可以根据具体需求选择适合的方法来实现自定义排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java集合框架实现自定义排序](https://blog.csdn.net/weixin_34066347/article/details/86114722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java 中 List 排序的 3 种方法](https://blog.csdn.net/weixin_64061088/article/details/128668010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zoriah

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

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

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

打赏作者

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

抵扣说明:

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

余额充值