【问题标题】:Sorting String objects排序字符串对象
【发布时间】:2012-06-04 19:15:30
【问题描述】:

我只是想看看是否有一种简单的方法可以对 String 对象列表进行排序。我现在面临的问题是 Collections.sort(...) 方法对我不起作用。

这是我的原始列表,出于我的要求,已排序:

    List<String> values = new ArrayList<String>();


    values.add("section_1");
    values.add("section_2");
    values.add("section_3");
    values.add("section_4");
    values.add("section_5");
    values.add("section_6");
    values.add("section_7");
    values.add("section_8");
    values.add("section_9");
    values.add("section_10");
    values.add("section_11");
    values.add("section_12");
    values.add("section_13");

在执行 Collections.sort(values) 之后,顺序现在被破坏了:

section_1
section_10
section_11 
section_12
section_13
section_2
section_3
section_4
section_5
section_6
section_7
section_8
section_9

这种行为是因为 Collections.sort(...) 中使用的字典顺序吗?有没有更简单的方法可以让这种排序按我想要的方式工作?

提前致谢。

【问题讨论】:

标签: java collections sorting


【解决方案1】:

这种行为是因为 Collections.sort(...) 中使用的字典顺序吗?

当然。您已根据自然顺序对字符串进行了排序。

有没有更简单的方法可以让这种排序按我想要的方式工作?

创建一个实现Comparator&lt;String&gt; 的类,该类表示您要使用的比较,并将其作为第二个参数传递给Collections.sort。不过,您必须自己编写逻辑(或找到第三方库来这样做)。我认为标准库中没有任何东西可以做到这一点。 (您需要考虑区分大小写以及可能的各种其他因素。)

当然,如果您可以将 data 更改为 section_01section_02 等,这意味着您可以使用自然排序顺序...

【讨论】:

  • @NominSim:我刚刚添加了同样的东西 :)
  • 是的刚刚看到并删除了我的评论哈哈。
【解决方案2】:

您需要使用自定义比较器来提取字符串的数字部分,将它们转换为整数实例,然后比较这些整数:

public class SectionComparator implements Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        Integer i1 = Integer.valueOf(s1.substring(s1.indexOf('_') + 1));
        Integer i2 = Integer.valueOf(s1.substring(s2.indexOf('_') + 1));
        return i1.compareTo(i2),
    }
}

但是除了使用字符串来表示部分,您还可以使用 Section 对象,它具有数字属性、toString() 方法和使用数字属性的自然排序。

【讨论】:

    【解决方案3】:

    另请参阅this 帖子

    你需要使用The Alphanum Algorithm

    其他人之前建议实施 Comparator。 here's an implementation

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      相关资源
      最近更新 更多