java - 排序结果在 Java 中以 A, a, B, b... 的形式递增返回

标签 java list collections comparator comparable

我想根据名称属性对列表进行排序

并且排序应该像 A, a, B, b ... 在 java 中升序

如果有人在这方面帮助我,那就太好了。

例如

package corejava.compare;

import java.util.Comparator;

public class FirstNameSorter implements Comparator<Employee>{

     @Override
     public int compare(Employee o1, Employee o2) {
         return o1.getFirstName().compareTo(o2.getFirstName());
     }
}

我使用了这个比较器如下:

Employee e1 = new Employee(1, "aTestName", "dLastName", 34);
Employee e2 = new Employee(2, "A", "pLastName", 30);
Employee e3 = new Employee(3, "T", "sLastName", 31);
Employee e4 = new Employee(4, "D", "zLastName", 25);
Employee e5 = new Employee(5, "b", "zLastName", 25);

List<Employee> employees = new ArrayList<Employee>();
employees.add(e2);
employees.add(e3);
employees.add(e1);
employees.add(e4);
employees.add(e5);

Collections.sort(employees, new FirstNameSorter());

// Sorted by firstName
System.out.println(employees);

然后我得到以下输出:

A
D
T
b

但是,我想要以下输出:

A
b
D
T

最佳答案

就像评论中提到的@Zabuza 一样,您想要的顺序是几乎 不区分大小写的字母顺序,但不完全是,因为您希望在大写和小写字符相同时将它们组合在一起信。

您可以通过简单地添加小写字母并比较它们来完成此操作,如果小写检查显示匹配,则单独检查以恢复为纯字典顺序:

例如

public class FirstNameSorter implements Comparator<Employee> {
    @Override
    public int compare(Employee o1, Employee o2) {
        int precheck = o1.getFirstName().toLowerCase().compareTo(o2.getFirstName().toLowerCase());
        return precheck != 0 ? precheck : o1.getFirstName().compareTo(o2.getFirstName());
    }
}

关于java - 排序结果在 Java 中以 A, a, B, b... 的形式递增返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57277475/

相关文章:

c# - 子属性更改时,FreezableCollection 不提供更改通知

Java:具有多个队列的执行器服务

java - Spring SOAP 。无法访问 wsdl 文件

java - 谷歌应用程序引擎-Java : HTML Error 403: Configuration Solution Thread

python - Common Lisp——列表拆包? (类似于 Python)

c# - 包含以下划线开头的字符串的列表排序

java - 何时应用操纵随机访问列表的算法?

Java数组打印修改后的值

Python - 我只能通过 append 保存一件事?

java - 使用 spring 表达式语言 (SpEL) 更新集合中的属性