Android排序数组

erd*_*ter 7 java arrays sorting

我有一个由名称和分数组成的字符串数组.我想按分数对该数组进行排序.问题是,考虑到它是一个字符串数组,分数是字符串,导致13,16,2,5,6而不是2,5,6,13,16.我正在使用此代码:

int spaceIndex;
String[][] scoreboard;
String[] playername;
String[] score;
int sbsize;

array1.add("Thomas" + ":" + 5);
array1.add("Blueb" + ":" + 6);
array1.add("James" + ":" + 16);
array1.add("Hleb" + ":" + 13);
array1.add("Sabbat" + ":" + 2);
sbsize = array1.size();
scoreboard = new String[sbsize][2];
playername = new String[sbsize];
score = new String[sbsize];
pos2 = new int[sbsize];

for (int i=0; i<array1.size(); i++)
{
    spaceIndex =  array1.get(i).indexOf(':'); 
    scoreboard[i][0] = array1.get(i).substring(0, spaceIndex);
    scoreboard[i][1] = array1.get(i).substring(spaceIndex+1, array1.get(i).length());
}

Arrays.sort(scoreboard, new Comparator<String[]>() {
 @Override
 public int compare(String[] entry1, String[] entry2) {
    String time1 = entry1[1];
    String time2 = entry2[1];
    return time1.compareTo(time2);
    }
 });
Run Code Online (Sandbox Code Playgroud)

解决办法是什么?

fic*_*ion 16

将它们转换为int.我记得,像......

Arrays.sort(scoreboard, new Comparator<String[]>() {
     @Override
     public int compare(String[] entry1, String[] entry2) {
        Integer time1 = Integer.valueOf(entry1[1]);
        Integer time2 = Integer.valueOf(entry2[1]);
        return time1.compareTo(time2);
        }
     });
Run Code Online (Sandbox Code Playgroud)

您还可以创建简单的值对象类,以便于操作.喜欢...

class Player
{
  public String name;
  public int score;
}
Run Code Online (Sandbox Code Playgroud)

之后你可以做

 Player[] scoreboard = ...
 Arrays.sort(scoreboard, new Comparator<Player>() {
          @Override
          public int compare(Player player1, Player player2) {
              if(player1.score > player2.score) return 1;
              else if(player1.score < player2.score) return -1;
              else return 0;            
             }
 });
Run Code Online (Sandbox Code Playgroud)

编辑:我建议您了解基本的OOP原则,这将在一开始就帮助您.

编辑2:Java 8(带有功能接口和lambda):

Arrays.sort(scoreboard, (player1, player2) -> {
  Integer time1 = Integer.valueOf(player1[1]);
  Integer time2 = Integer.valueOf(player2[1]);
  return time1.compareTo(time2);
});
Run Code Online (Sandbox Code Playgroud)


小智 5

这是排序字符串数组的简单方法:
Arrays.sort(mystringarray);