java - 使用预定义顺序对 java arrayList 进行排序

标签 java

我有一个未排序的列表,但我想以自定义方式排序,即

item_one_primary.pls
item_one_secondary.pls
item_one_last.pls

item_two_last.pls
item_two_primary.pls
item_two_secondary.pls

item_three_secondary.pls
item_three_last.pls
item_three_primary.pls

这是我预定义的顺序:primary, secondary, last

应用排序后的无序列表应该如下所示:

item_one_primary.pls
item_one_secondary.pls
item_one_last.pls

item_two_primary.pls
item_two_secondary.pls
item_two_last.pls

item_three_primary.pls
item_three_secondary.pls
item_three_last.pls

我尝试了一些比较器,但结果是这样的:

item_one_primary.pls
item_two_primary.pls
item_three_primary.pls

...

有谁知道如何对此进行排序?

这是我用过的一些代码:

List<String> predefinedOrder;

public MyComparator(String[] predefinedOrder) {
        this.predefinedOrder = Arrays.asList(predefinedOrder);
    }

@Override
    public int compare(String item1, String item2) {
        return predefinedOrder.indexOf(item1) - predefinedOrder.indexOf(item2);
    }   

我没有包含拆分(首先用点 (.) 拆分,然后用下划线 (_) 拆分以获得预订列表中的项目)。

最佳答案

您必须使用一个比较器,它首先检查商品编号,只有当它们相等时,才检查您的预定义顺序

尝试这样的事情:

public int compare(Object o1, Object o2) {
        String s1 = (String) o1;
        String s2 = (String) o2;

        String[] a1 = s1.split("_");
        String[] a2 = s2.split("_");

         /* If the primary elements of order are equal the result is 
         the order of the second elements of order */ 
        if (a1[1].compareTo(a2[1]) == 0) { 
            return a1[2].compareTo(a2[2]); 
        /* If they are not equal, we just order by the primary elements */
        } else {
            return a1[1].compareTo(a2[1]);
        }
    }

这只是一个基本示例,一些额外的错误检查会很好。

关于java - 使用预定义顺序对 java arrayList 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5807309/

相关文章:

java - CSVReader 不检查整个文件

java - 将 Angular 5 应用程序嵌入到 Jsp 项目的另一个应用程序中

java - 使用 Maven 编译具有所有依赖项的 JavaFX jar

java - 将 Quartz 表达式预测到下一个工作日

java - 序列化文本文件的新行丢失

java - 智能 : How to set default working directory?

java从字符串变量中获取最后一行(最快的方法)

java - 从 jar 文件生成 UTF-8 文件

java - 有没有办法从java小程序读取浏览器的cookie?

Java 直接强制转换与使用局部变量强制转换