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

标签 java string list sorting javafx

示例:

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

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

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

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

到目前为止我尝试了什么:

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

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

最佳答案

在 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());

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

Han Solo, Hans, Fritz, Kevin, Peter

关于Java - 对字符串列表进行排序,根据字符串的包含确定顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142250/

相关文章:

java - 从字符串中按名称获取变量

java - 将 InputStream 转换为 FileInputStream 对 Apache POI 不起作用

java - Java EE Web 应用程序的架构/设计应该是什么?

C语言int num转char字符串

python - 对重复的联系人重新排序。列表问题

list - 可以在查询字符串中使用 != 吗?

python - 高效地对 pandas 列的多个子集进行回归分析

java - 在 servlet 过滤器中保存并重新使用请求?

java - 读取文件提供更多行

string - 在 OCaml 中将字符转换为字符串