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

标签 java sorting collections java-8 comparator

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

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 还是其他.

最佳答案

你可以这样做:

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

关于Java 结合自定义比较器使用比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50454822/

相关文章:

java - 在 RxJava 中什么算作异步边界?

java - 使用递归打印出收敛和发散的数字序列时遇到问题

javascript - 排序、切换和显示从对象数组生成的数组

C++冒泡排序动态分配数组

java - 需要模式建议(Hibernate + Guice)

java - gradle排除子项目的运行任务

algorithm - 一些排序算法的序列

c# - 绑定(bind)到集合的 View 并在 WPF 中调用 ToString()

java - 在 ArrayDeque 中同时使用 push()、offer() 和 add() 方法会发生什么?

java - 此 Java 代码中有多少对象符合垃圾回收条件?