java - 使用枚举对列表进行排序

标签 java sorting

我正在四处寻找一种方法来根据多个字段中的一个对对象列表进行排序(我最终只是自己问这个问题)但在我的研究中,我遇到了这个答案:

https://stackoverflow.com/a/1421537/1549672

我是 java 的新手,这可能就是原因,但我不太了解最后一种方法:

public static Comparator<Person> getComparator(final PersonComparator... multipleOptions) {
    return new Comparator<Person>() {
        public int compare(Person o1, Person o2) {
            for (PersonComparator option : multipleOptions) {
                int result = option.compare(o1, o2);
                if (result != 0) {
                    return result;
                }
            }
            return 0;
        }
    };
}

有人可以解释一下它是如何工作的……以及它到底有什么作用吗? 谢谢!

最佳答案

它会找到第一个不会返回“equals”的比较器并返回它的值,否则返回“equals”。

实际上,它会创建一个新的 Comparator 来执行此操作,方法是创建一个基于 Comparator 接口(interface)的匿名类。

public static Comparator<Person> getComparator(
   final PersonComparator... multipleOptions) 
{        
    return new Comparator<Person>() { //create anonymous class 
        public int compare(Person o1, Person o2) { //which implements the only method 
                                                   //in Comparator
            for (PersonComparator option : multipleOptions) { //loop through given 
                                                              //comparators
                int result = option.compare(o1, o2);
                if (result != 0) {                         //return value of the first
                    return result;                         //which says "non-equal"
                }
            }
            return 0;//all said "equals" so we say "equals"
        }
    };
}

关于java - 使用枚举对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786035/

相关文章:

java - 如何使用 apache poi 为 Excel 工作表中的特定行或标题添加背景颜色

java - 代码力量 427E : impossible to write fast enough solution in Java

java - 将 int 值赋给字符串

java - 无法通过使用 Selenium Webdriver 设置 Firefox 配置文件来下载文件

c++ - 对数组进行排序并维护元素的旧索引

java - 在Java中使用RegEx提取括号之间的参数

excel - 在 Excel 中按字母顺序排序的顺序公式

javascript - 如何按图像源名称对 UL 下的所有 LI 进行排序?

algorithm - 如何确定范围列表是否涵盖给定范围?

javascript - JS : sort array by two fields