【问题标题】:Is it possible to sort a an array list while ignoring the first 3 characters in each string?是否可以在忽略每个字符串中的前 3 个字符的同时对数组列表进行排序?
【发布时间】:2016-01-08 21:00:20
【问题描述】:

我试图弄清楚如何按字母顺序对列表进行排序,通常这很容易,但我需要忽略列表中每个字符串的前 5 个字符。 (他们是数字IDS)

        ArrayList<String> tempList = new ArrayList<String>();

        for(String s : AddressBook){
        tempList.add(s);

        Collections.sort(tempList );

            }
        System.out.println(tempList);

【问题讨论】:

  • 如果你在这里举一些例子,那么你的问题就很容易理解了。

标签: java sorting linked-list


【解决方案1】:

您可以通过提供自己的 Comparator 实现来做到这一点。

Collections.sort (tempList, new Comparator<String>() {
  public int compare(String o1, String o2)
  {
    String sub1 = o1.substring (3);
    String sub2 = o2.substring (3);
    return sub1.compareTo (sub2);
  }
});

【讨论】:

    【解决方案2】:

    是的,这在 Java 8 中相当简单:

    Collections.sort(list, Comparator.comparing(s -> s.subString(4));
    

    【讨论】:

    • 这是psedocode,我尝试在我的源代码中使用它,但我的编译器不喜欢它。
    • Lambda 表达式,你会有 Java8
    【解决方案3】:

    这个答案适用于 Java 8,通过使用 lambda 表达式来提高性能和可读性。

    您可能需要应用特殊的字符串长度检查(如果您的实现提供的字符串短于 6 个字符)。

    Collections.sort (tempList, (o1, o2) -> o1.substring(5).compareTo(o2.substring(5)));
    

    【讨论】:

    • 是否可以在不使用 java 8 的情况下做到这一点?我试图编译它的unix系统不喜欢那行代码。
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2013-10-22
    • 2023-03-15
    • 2018-05-04
    • 2018-08-29
    相关资源
    最近更新 更多