Java列表元素自定义排序方式

 更新时间:2024年12月14日 10:03:35   作者:天航星  
文章介绍了在Java开发中如何对列表元素进行自定义排序,通过实现`Comparator`接口并重写`compare`方法来指定自定义排序规则,示例展示了如何对汉字数字进行排序,并通过改变自定义顺序列表的元素添加顺序来实现倒序排序

Java列表元素自定义排序

在 Java 开发过程中,有时会遇到需要对列表中元素进行自定义的排序。

这样的排序往往不能由元素本身的特性(比如字符串长度、首字母顺序)判断,需要自己指定顺序。

比如对汉字的数字进行排序,他们的字符串长度都为 1,首字母顺序也不能得到预期的结果,因此需要自定义排序。

示例代码

public static void main(String[] args) {
    
    // 自定义顺序列表
    List<String> customSortList = new ArrayList<>();
    customSortList.add("一");
    customSortList.add("二");
    customSortList.add("三");
    customSortList.add("四");
    customSortList.add("五");
    customSortList.add("六");
    customSortList.add("七");
    customSortList.add("八");
    customSortList.add("九");
    // 实际数据列表
    List<String> realDataList = new ArrayList<>();
    realDataList.add("三");
    realDataList.add("九");
    realDataList.add("八");
    realDataList.add("四");
    realDataList.add("五");
    realDataList.add("二");
    realDataList.add("一");
    realDataList.add("六");
    realDataList.add("七");
    // 自定义排序  
    realDataList.sort((s1, s2) -> {

        // 获取s1在自定义顺序列表中的位置
        int index1 = customSortList.indexOf(s1);
        // 获取s2在自定义顺序列表中的位置
        int index2 = customSortList.indexOf(s2);
        // 如果字符串不在自定义顺序列表中,可以决定它们的位置  
        // 这里假设不在列表中的字符串应该排在最后  
        if (index1 == -1) {
            // 如果两个都不在列表中,则它们相等;否则,s1排在s2后面
            return (index2 == -1) ? 0 : 1;
        }
        // s2不在列表中,所以s1排在s2前面  
        if (index2 == -1) {
            return -1;
        }
        // 否则,按照自定义顺序列表中的索引进行排序  
        return Integer.compare(index1, index2);
    });
    System.out.println(Arrays.toString(realDataList.toArray()));
}

打印结果

[一, 二, 三, 四, 五, 六, 七, 八, 九]

这样就得到了预期的结果。

如果需要改变排序规则(比如倒序),只需要改变自定义顺序列表的元素添加顺序即可。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mybatis实现ResultMap结果集

    Mybatis实现ResultMap结果集

    本文主要介绍了Mybatis实现ResultMap结果集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • MyBatis元素resultMap介绍及使用详解

    MyBatis元素resultMap介绍及使用详解

    这篇文章主要介绍了MyBatis元素resultMap介绍及使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • springboot多租户设计过程图解

    springboot多租户设计过程图解

    这篇文章主要介绍了springboot多租户设计过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • MyBatis-Plus通过version机制实现乐观锁的思路

    MyBatis-Plus通过version机制实现乐观锁的思路

    version机制的核心思想就是,假设发生并发冲突的几率很低,只有当更新数据的时候采取检查是否有冲突,而判断是否有冲突的依据就是version的值是否被改变了,这篇文章主要介绍了MyBatis-Plus通过version机制实现乐观锁的思路,需要的朋友可以参考下
    2021-09-09
  • Netty分布式pipeline管道异常传播事件源码解析

    Netty分布式pipeline管道异常传播事件源码解析

    这篇文章主要为大家介绍了Netty分布式pipeline管道异常传播事件源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • 一文教你搞懂SpringBoot自定义拦截器的思路

    一文教你搞懂SpringBoot自定义拦截器的思路

    在开发中,都离不开拦截器的使用,比如说在开发登录功能时,实现权限管理功能时等,这篇文章主要带大家使用SpringBoot梳理自定义拦截器的思路,需要的可以参考一下
    2023-08-08
  • 使用eclipse快速新建spirngboot项目的方法

    使用eclipse快速新建spirngboot项目的方法

    本篇文章主要介绍了使用eclipse快速新建spirngboot项目的方法,具有一定的参考价值,有兴趣的可以了解一下
    2017-04-04
  • kafka 启动报错 missingTopicsFatal is true的解决

    kafka 启动报错 missingTopicsFatal is true的解决

    这篇文章主要介绍了kafka 启动报错 missingTopicsFatal is true的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 解决IDEA中 Ctrl+ALT+V这个快捷键无法使用的情况

    解决IDEA中 Ctrl+ALT+V这个快捷键无法使用的情况

    这篇文章主要介绍了解决IDEA中 Ctrl+ALT+V这个快捷键无法使用的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • JWT + 拦截器实现无状态登录系统

    JWT + 拦截器实现无状态登录系统

    JWT(JSON Web Token)提供了一种无状态的解决方案:用户登录后,服务器返回一个 Token,后续请求携带该 Token 即可完成身份验证,无需服务器存储会话信息,本文将结合 Spring Boot 拦截器,手把手实现一个完整的JWT无状态登录系统,感兴趣的朋友一起看看吧

    2025-08-08

最新评论