示例:
我们的名单包含 5 个名字:Kevin、Hans、Fritz、Han Solo、Peter
现在我想要所有包含“Han”的名字都在顶部。
所以排序列表看起来像这样:
汉斯、汉索罗、凯文、弗里茨、彼得
到目前为止我尝试了什么:
没有,因为我不知道,但我已经用谷歌搜索了,但没有找到任何东西。
从列表中删除/添加项目不是一个选项,因为我在 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
关于Java - 对字符串列表进行排序,根据字符串的包含确定顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142250/