对String数组对象列表进行排序

时间:2013-12-12 19:07:21

标签: java list sorting comparator

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

我按如下方式设置我的列表:

List CurrentRankingsList = rankings.getRankings();

我有一个这样的String对象列表:

[["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)

1 个答案:

答案 0 :(得分:2)

  

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

  • 声明列表或任何类型为ArrayList<String[]>List<String[]>的集合,否则Collection将被视为原始类型,我们将面临类型不安全操作的运行时错误开销。
  • 您需要将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());
         }
     }) ;