例:

我们的列表包含5个名称: Kevin,Hans,Fritz,Han Solo,Peter

现在,我想将所有包含“Han”的名称放在顶部。

因此,排序后的列表如下所示:

Hans,Han Solo,Kevin,Fritz,Peter

到目前为止我尝试过的是:

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

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

最佳答案

在Java 8中,您可以基于应用于元素的函数创建 Comparator s。还有一些方法可以颠倒比较器和链比较器产生的顺序。

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

final String part = "Han";

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

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

Han Solo, Hans, Fritz, Kevin, Peter

09-05 09:20