【问题标题】:Java: ArrayList<String> sorting using comparators (ArrayLists doesn't store objects)Java:ArrayList<String> 使用比较器排序(ArrayLists 不存储对象)
【发布时间】:2017-10-28 16:29:25
【问题描述】:

我想使用比较器对 String 类型的 ArrayList 进行排序。如果 ArrayList 存储对象,我只找到了有关如何执行此操作的示例。

我有一个包含 10 个符号的字符串的 ArrayList,其中最后 5 个符号是构成数字的数字。我想按每个字符串末尾的那些数字的升序求解一个数组列表。我该怎么做?

谢谢!

【问题讨论】:

  • String 一个Object。您尝试过什么(确切地)?让我们看一些代码。
  • private static ArrayList&lt;String&gt; allCodes = new ArrayList&lt;String&gt;(); //add some codes in .... private void sortAllCodesNumbers (){ Collections.sort(allCodes, allCodes.getCompByNum()); }
  • public static Comparator&lt;String&gt; getCompByNum() { Comparator comp = new Comparator&lt;String&gt;(){ @Override public int compare(allBooks b1, allBooks b2) { String IDnumbers1 = b1.substring(AUTHOR_ID_LENGHT+GENRE_LENGTH); int number1 = Integer.parseInt(IDnumbers1); String IDnumbers2 = b2.substring(AUTHOR_ID_LENGHT+GENRE_LENGTH); int number2 = Integer.parseInt(IDnumbers1); return number1.compareTo(number2); } }; return comp; }
  • 检查这个:List list= new ArrayList(); list.add("abc456"); list.add("abc123"); list.add("abc012"); System.out.println(list); Collections.sort(list); System.out.println(list);输出:[abc456,abc123,abc012] [abc012,abc123,abc456]

标签: java arraylist comparator


【解决方案1】:

这是完成任务的一种方式; sorted 接受 Comparator 对象。

List<String> result = myArrayList.stream().sorted(Comparator.comparingInt(e -> Integer.parseInt(e.substring(5))))
                                          .collect(Collectors.toList());

或者简单地说:

myArrayList.sort(Comparator.comparingInt(e -> Integer.parseInt(e.substring(5))));

【讨论】:

  • 不需要正则表达式。为什么不只是 e.substring(5)?
  • @JBNizet 是的,我会使用你的想法。
【解决方案2】:

Collections.sort 可以使用 Comparator 对列表进行排序。另外你需要 String.substring:

Collections.sort(list, new Comparator<String>(){
    @Override
    public int compare(String o1, String o2) {
        return o1.substring(5).compareTo(o2.substring(5));
    }
});

【讨论】:

    【解决方案3】:
    Collections.sort(list, String::compareTo);
    

    上面的代码完成了这项工作。

    如果您想要更多控制,可以使用/链接比较器接口中可用的静态方法之一。

    Collectios.sort(list, Comparator.comparing(String::CompareTo).thenComparingInt(String::length));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-25
      • 2021-09-26
      • 2014-04-26
      • 1970-01-01
      • 2016-08-11
      • 2016-01-16
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多