首页 > 编程语言 >Java 列表元素自定义排序

Java 列表元素自定义排序

时间:2024-10-15 15:33:41浏览次数:6  
标签:Java 自定义 realDataList 列表 add customSortList 排序

在 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()));
}

打印结果:

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

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

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

标签:Java,自定义,realDataList,列表,add,customSortList,排序
From: https://www.cnblogs.com/skysailstar/p/18467594

相关文章

  • Delphi 自定义窗体(最大化、最小化、关闭、窗体的移动)
    UsesShellAPI;1、//最小化procedureTForm1.btn1Click(Sender:TObject);varI,J,X,Y:Word;begin//第一种:最小化在屏幕的左下角,不是常见的最小化//WindowState:=wsMinimized;//第儿种:最小化在任务栏里面,是常见的最小化postmessage(Self.Handle,WM_SYSCOMMAN......
  • Java变量类型
    在Java中,变量根据声明位置、数据类型、是否有初始值等属性,可以分为多种类型。具体来说,Java中的变量类型可以分为以下几类:1.按数据类型分类1.1.基本数据类型(PrimitiveTypes)Java提供了8种基本数据类型,用于存储简单的数据。它们包括:整数类型:byte:8位,取值范围-128......
  • 自定义线程池的使用
    现在有一个使用多线程进行调优的案例:模拟使用多线程并发处理数据。1.自定义一个线程池//自定义一个线程池classThreadPoolManger{privatefinalThreadPoolExecutorexecutor;privatefinalAtomicBooleanisShutdown;/***构造方法,用于初始化线程......
  • Java字段初始化规律
    publicclassmm{publicstaticvoidmain(String[]args){InitializeBlockClassobj=newInitializeBlockClass();System.out.println(obj.field);obj=newInitializeBlockClass(300);System.out.println(obj.field);}}classInitializeBlockClas......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城
    HTML+CSS+JS【购物商场】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 2024年最新版Java面试八股文!
    1、并发编程三要素?(1)原子性原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。(2)可见性可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。(3)有序性有序性,即程序的执行......
  • java+vue计算机毕设高校消防设施管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于高校消防设施管理的研究,现有研究多侧重于消防安全管理的一般性原则和措施,主要以整体建筑或公共场所消防管理为主。专门针对高校这一特殊环境......
  • java+vue计算机毕设高校校园一卡通管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于高校校园一卡通管理系统的研究,现有研究多侧重于其技术实现和功能拓展方面,如硬件设施的升级或特定功能模块(如消费功能)的优化等11。专门针对整......
  • java+vue计算机毕设高校教材征订管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于高校教材征订管理系统的研究,现有研究多侧重于教学管理系统整体框架的构建,对于教材征订这一特定环节的专门研究较少。在国内外高校管理领域,虽......
  • java+vue计算机毕设高校人事管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于高校人事管理系统的研究,现有研究主要以通用的人事管理功能为主,专门针对高校特定人事管理流程如职称评审、任期考核等的研究较少。在国内外,人......