首页 > 解决方案 > Java 将比较器与自定义比较器结合使用

问题描述

我想对以下示例列表进行排序,该列表当前仅包含具有我自己的自定义规则的字符串。

ArrayList<String> coll = new ArrayList<>();
coll.add("just");
coll.add("sdsd");
coll.add("asb");
coll.add("b as");
coll.add("just");
coll.add("dhfga");
coll.add("jusht");
coll.add("ktsa");
coll.add("just");
coll.add("just");

我知道我可以为此编写自己的比较器,但我知道 Java 也有比较器可以部分解决这个问题,我想知道如何将 Java API中的比较器与我自己的比较器结合使用。


应该如何排序?

该单词just应始终是列表中出现的第一个单词,然后按字母顺序排列所有其他单词。

Comparator.naturalOrder()按字母顺序对列表进行排序,但是如何将此比较器与一个自定义的比较器结合起来,以检查单词是just还是其他东西。

标签: javasortingcollectionsjava-8comparator

解决方案


你可以这样做:

coll.sort(Comparator
    .comparingInt((String s) -> s.equals("just") ? 0 : 1) // Words "just" first
    .thenComparing(Comparator.naturalOrder())); // Then others

推荐阅读