当前位置: 首页 > 知识库问答 >
问题:

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

云季同
2023-03-14

示例:

我们的名单上有5个名字:凯文、汉斯、弗里茨、汉·索罗、彼得

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

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

Hans,Han Solo,Kevin,Fritz,Peter

到目前为止我所尝试的:

什么都没有,因为我没有线索,但我已经谷歌了,没有找到任何东西。

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

共有2个答案

范云
2023-03-14

只需使用comparator并根据您的条件定义您自己的比较方法:

public static void main(String[] args) {
    List<String> names = Arrays.asList("Kevin,Hans,Fritz,Han Solo,Peter".split(","));

    Collections.sort(names, new Comparator<String>() {
        final String PREFIX = "Han";
        @Override
        public int compare(String a, String b) {
            if (a.contains(PREFIX) && b.contains(PREFIX)) return a.compareTo(b);
            if (a.contains(PREFIX) && !b.contains(PREFIX)) return -1;
            if (!a.contains(PREFIX) && b.contains(PREFIX)) return 1;
            return 0;
        }
    });

    for (String n : names) {
        System.out.println(n);
    }
}

输出(IMHOHan Solo必须在Hans之前,因为SpaceS之前,但您可以轻松修改我提出的条件)

Han Solo
Hans
Kevin
Fritz
Peter
燕经国
2023-03-14

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

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

final String part = "Han";

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

使用此比较器对项目进行排序的结果是

Han Solo, Hans, Fritz, Kevin, Peter
 类似资料:
  • 我有一个字符串数组,中间有一个空白。我想根据空白之前的第一个子字符串对内容进行排序,然后根据空白之后的子字符串对内容进行排序。 例如,如果我的数组如下所示:,那么最后我需要。 我尝试在下面实现一个新的比较器: 但是我得到了这个错误: MyClass。java:7:错误:找不到合适的排序方法(字符串[], 这个错误听起来像是集合框架不支持排序字符串,这没有多大意义。

  • 我正在尝试编写一个程序,根据列表中最不频繁的字符排列字符串列表。例如,如果列表是,列表中的字母频率将是a-5,n-3,p-2,e-2,l-1,o-1,r-1,g-1,b-1。由于橙色包含最不频繁的字母,程序将返回橙色,然后是apple,然后是banana。 到目前为止,我已经编写了按频率排列列表中所有字母的代码。但我需要应用它来找出哪个字符串包含最不频繁的字母。 这是我的代码:

  • 本文向大家介绍Python对字符串列表进行排序,包括了Python对字符串列表进行排序的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将看到如何对字符串列表进行排序。我们将使用sort方法和sorted函数对给定的字符串列表进行排序。然后,我们将了解如何根据不同的条件(例如长度,值等)对字符串列表进行排序, 让我们看看如何使用list.sort方法对字符串列表进行排序。排序方法列表是一个

  • 问题内容: 我正在尝试对字符串列( 包含数字 )进行排序。 您会看到Mysql的自然排序算法放在后面( 对于大多数应用程序来说都可以 ),但是我有独特的需求,因此我希望结果应该像这样排序。 仅使用SQL 是否可能,或者我必须在应用程序级别操纵结果集? 问题答案: 继续 假设 它始终为WORD_space_NUMBER,这应该可行: 使用POSITION查找空间,使用SUBSTRING捕获其后的数字

  • 问题内容: 我有一个具有以下格式的字符串列表: …,我想根据零件的字母顺序对列表进行排序。我将如何去做呢? 问题答案: 要更改排序键,使用的参数: 与以下方法相同: 请注意,如问题中所述,这将是字母排序,因此对于2位数字的组件,它不会将它们解释为数字,例如,“ 11”将出现在“ 2”之前。

  • 问题内容: 我想对具有nr的字符串进行排序。我怎么做? 可以说我的整数是 在主要我做class2.Sort(); 提前致谢。 问题答案: