Java - 对字符串列表进行排序,根据字符串的包含确定顺序

Mar*_*cel 4 java sorting string javafx list

例子:

我们的名单包含 5 个名字:Kevin、Hans、Fritz、Han Solo、Peter

我现在想要所有顶部包含“Han”的名字。

所以排序后的列表看起来像这样:

汉斯、汉·索罗、凯文、弗里茨、彼得

到目前为止我已经尝试过:

没什么,因为我不知道,但我已经用谷歌搜索了,但没有找到任何东西。

从列表中删除/添加项目不是一个选项,因为我在CheckListView(ControlsFX 组件)中使用列表,其中每个项目都有一个会丢失的选中状态。

fab*_*ian 6

在 java 8 中,您可以根据应用于元素的函数创建Comparators 。还有一些方法可以反转比较器和链比较器产生的顺序。

这允许使用子串的存在作为主要排序标准并将排序作为次要标准来相对简单地创建比较器String。请注意,根据您的要求,第二部分 ( .thenComparing(Comparator.naturalOrder())) 可能不是必需的:

final String part = "Han";

Comparator<String> comparator = Comparator.<String, Boolean>comparing(s -> s.contains(part)).reversed()
        .thenComparing(Comparator.naturalOrder());
Run Code Online (Sandbox Code Playgroud)

用此对项目进行排序的结果Comparator

final String part = "Han";

Comparator<String> comparator = Comparator.<String, Boolean>comparing(s -> s.contains(part)).reversed()
        .thenComparing(Comparator.naturalOrder());
Run Code Online (Sandbox Code Playgroud)