首页 > 解决方案 > 排序列表通过优先的起始字母

问题描述

例如,我有一个如下所示的列表:

["a: foo", "b: bar", "c: foo", "d: bar"]

我想按给定的优先级对其进行排序,例如 b > c > 每隔一个字符。所以结果应该是:

["b: bar", "c: foo", "a: foo", "d: bar"]

有没有一种简单的方法可以做到这一点?

标签: javasortingarraylist

解决方案


定义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);

推荐阅读