【问题标题】:Sort an ArrayList of semicolon separated values by a field按字段对分号分隔值的 ArrayList 进行排序
【发布时间】:2013-09-16 04:08:29
【问题描述】:

我有一个分号分隔值的 ArrayList,需要按每个 ArrayList 元素的第二个字段进行排序。

数组列表的每个元素都有以下形式:

  field1;field2;field3;field4

并且需要按字段排序。2有没有办法做到这一点而不必创建临时数组,切换field1field2,对该数组进行排序,然后切换field1field2再来一次?

感谢您提供的任何帮助

【问题讨论】:

  • 按第二个字段排序是什么意思?你能举个例子吗?
  • 说'field2'是客户姓氏,'field1'是客户名字,数组列表需要按姓氏排序
  • @Katie 如果是这样,为什么不创建一个类来表示 Customer 并对它们进行排序?

标签: java sorting arraylist


【解决方案1】:

您需要编写一个Comparator<String> 来提取第二个字段并进行比较。不需要中间数组。只是一点 substring/indexof/regex/substringBetween.

【讨论】:

  • Comparator没用过,我去查一下,谢谢
【解决方案2】:

您可以这样做,创建自己的 Comparator 并使用 Collections.sort 之类的东西

Collections.sort(yourArrayList, new Comparator<String>(){
       @Overide
       public int compare(String s1,  String s2){                 
            String s1Field2, s2Field2;
            // Do your extracting of field 2 for each String
            s1Field2 = s1.split(";")[1];
            s2Field2 = s2.split(";")[1];
            // You may also want to add to this to ensure that the original strings 
            // do contain a 'field2'
            return s1Field2.compareTo(s2Field2);
       }
   });

【讨论】:

    【解决方案3】:

    此代码将为您完成:

    Collections.sort(list, new Comparator<String>(){
        @Overide
        public int compare(String s1, String s2){
            return s1.split(";")[1].compareTo(s2.split(";")[1]);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多