Java将比较器与自定义比较器结合使用

Sha*_*gon 4 java sorting collections comparator java-8

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

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");
Run Code Online (Sandbox Code Playgroud)

我知道我可以写我自己比较这一点,但我知道,Java也得到了我想知道我怎么可以使用那些从Java API,它部分地解决了这个问题比较结合我自己的一个.


应该如何分类?

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

Comparator.naturalOrder()按字母顺序对列表进行排序,但是如何将此comperator与检查单词是否为just其他的自定义组合.

Zhe*_*lov 6

你可以这样做:

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

  • `Boolean` 是 `Comparable`,所以这里不需要处理 `int` 值: `coll.sort(Comparator.comparing((String s) -&gt; !s.equals("just")) .thenComparing( Comparator.naturalOrder()));` (2认同)