java - 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
还是其他东西。
解决方案
你可以这样做:
coll.sort(Comparator
.comparingInt((String s) -> s.equals("just") ? 0 : 1) // Words "just" first
.thenComparing(Comparator.naturalOrder())); // Then others
推荐阅读
- swiftui - Xcode 11 beta 3 在同时使用 NavigationLink、@EnvironmentObject 和 List 时崩溃
- crystal-reports - 为什么水晶报告在我编写代码时提示我输入参数字段值
- random - 是否可以预测计算机会随机选择什么数字?
- java - NoSuchBeanDefinitionException 与多个 JdbcTemplate 和 Spring Boot
- c++ - 如何修复“二进制表达式的无效操作数”?
- node.js - React Native 教程:npm install 冻结
- postgresql - 具有不同名称的重复列
- android - 我在 xamrin android 中使用 RelativeLayout 的布局代码有问题吗?
- python-3.x - 如何跳过数据帧中for循环的最后一次迭代
- django - 如何按日期更改布尔字段“isActual”