例:
我们的列表包含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