【问题标题】:Sort a List of String array objects对字符串数组对象列表进行排序
【发布时间】:2013-12-31 08:55:18
【问题描述】:

如何按字母顺序对字符串数组对象列表进行排序。

我将我的列表设置如下:

List CurrentRankingsList = rankings.getRankings();

我有一个这样的字符串对象列表:

[["Dwayne","5"], ["Bill","4"], ["James","3"], ["Sally","3"]]

如何在保持列表结构的同时按名称按字母顺序对列表进行排序,例如[["Bill","4"], ["Dwayne","5"], ["James","3"], ["Sally","3"]] 我尝试了以下方法,但列表没有正确排序

      (Updated code from original question )    
           Collections.sort(CurrentRankingsList, new Comparator<Rankable>() 
            {
            @Override
            public int compare(Rankable o1, Rankable o2) {
            // TODO Auto-generated method stub
            String testo1=o1.getObject().toString();
            String testo2=o2.getObject().toString();
            int x = o1.getObject().toString().compareTo(o2.getObject().toString());
            return  o1.getObject().toString().compareTo(o2.getObject().toString());
            }
        }) ;

在调试比较时,我们得到 Paul (o1.GetObject.ToString) vs Nathan(o2.GetObject.ToString)

【问题讨论】:

标签: java list sorting comparator


【解决方案1】:

如何按字母顺序对字符串数组对象列表进行排序。

  • 声明列表或任何类型为:ArrayList&lt;String[]&gt;List&lt;String[]&gt; 的集合,否则集合将被视为原始类型,我们将面临类型不安全操作的运行时错误开销。
  • 您需要将String[] 作为类型传递给Comparator

     Collections.sort(CurrentRankingsList, new Comparator<String[]>() 
     {
        @Override
        public int compare(String[] o1, String[] o2) {
            // TODO Auto-generated method stub
                    return o1[0].compareTo(o2[0]);
         }
     }) ;
    

    假设CurrentRankingsList是数组字符串列表。

  • 对于这种情况,更简洁的方法是声明一个类,例如,Player 具有两个属性(名称、排名),然后根据该类的实例进行排序。

     class Player
     {
        String name;
        int rank;
    
         // your other code with constructor and getter, setter method    
      }
    
     ArrayList<Player>currentRankingsList = new ArrayList<>();
    
     Collections.sort(CurrentRankingsList, new Comparator<Player>() 
     {
        @Override
        public int compare(Player o1, Player o2) {
            // TODO Auto-generated method stub
                    return o1.getName().compareTo(o2.getName());
         }
     }) ;
    

【讨论】:

  • 我认为 CurrentRankingsList 是 List 的 List 或 String[] 的 List。
  • 我认为你可能是对的,但 OP 提到 How can i sort this list by the Names 很令人困惑 :)
  • 这不会改变你的代码太多^^ public int compare(String[] o1, String []o2) {return o1[0].compareTo(o2[0]);}
  • 您好,谢谢您的回答。第一个错误是因为我们将对象与字符串进行比较。所以我们尝试了第二次并在比较中进行了调试,发现 Paul vs Nathan 返回了 2。然后列表没有正确排序,我认为它进行了一些看起来随机的排序。
  • @Fearghal,请您改写一下。您是说使用Comparator&lt;String[]&gt; 的建议方法行不通吗?
猜你喜欢
  • 2017-09-26
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2015-03-26
  • 1970-01-01
相关资源
最近更新 更多