java - 排序列表通过优先的起始字母
问题描述
例如,我有一个如下所示的列表:
["a: foo", "b: bar", "c: foo", "d: bar"]
我想按给定的优先级对其进行排序,例如 b > c > 每隔一个字符。所以结果应该是:
["b: bar", "c: foo", "a: foo", "d: bar"]
有没有一种简单的方法可以做到这一点?
解决方案
定义Set
包含优先级字母的 a:
Set<Character> priority = Set.of ('b', 'c');
然后定义一个比较器来确定单词是否以优先级字母开头:
Comparator<String> pc = Comparator.comparing(s -> s.isEmpty() || !priority.contains(s.charAt(0)));
然后链接此比较器,使其与自然排序断开联系:
Comparator<String> chained = pc.thenComparing(Comparator.naturalOrder());
然后使用它对您的列表进行排序:
list.sort(chained);
推荐阅读
- c - 当我尝试在 c 中使用 Playsound() 时,编译器甚至不会编译它
- linux - 如果复制失败,Jenkins 管道将跳过阶段
- python - 将 np.linalg.norm() (python) 应用于 2d numpy 数组的每个元素和给定值的最快方法是什么?
- python - 在 Python 上将多进程与 API 请求和多个 for 循环一起使用
- android - AnimatedList 中小部件的颤振状态未保留
- reactjs - webpack/babel 没有复制我的 onClick 方法
- python - 计算字符串中出现的次数
- ethereum - 为私有以太坊部署设置生产和登台环境
- forms - 我应该如何在不禁用帐户的情况下制作带有密码并确认密码字段的表单?
- regex - html中标签之间的搜索模式