如何排序对象数组?

时间:2014-03-27 17:26:05

标签: java

我有一个像

这样的对象数组
Player p[] = new Player[t];

每个对象都有一个整数变量和一个名称变量。

public class Player {
   public String player_name;
   public int number;
}

从用户那里获得输入后,如何根据数字变量对该对象数组进行排序?

5 个答案:

答案 0 :(得分:1)

使用Java SE 8尝试类似(未经测试):

Arrays.stream(p).sorted((p1, p2) -> Integer.compare(p1.number, p2.number)) .collect(Collectors.toList())

修改

第二个想法在这种情况下这可能更有效,因为它不会创建新的数组/集合:

Arrays.sort(p, (p1, p2) -> Integer.compare(p1.number, p2.number));

答案 1 :(得分:0)

创建一个实现Comparator<Player>的类,名为PlayerComparator。通过创建需要两个Player的{​​{3}}来实现界面。返回负数,零或正数,具体取决于第一个Player是否被视为小于,等于或大于第二个Player

然后,您可以创建PlayerComparator并将其(与数组一起)传递给compare method

答案 2 :(得分:0)

让您的自定义类实现Comparable接口,然后您可以使用java Collection对数组进行排序(Arrays.sort()函数)

public class Player implements Comparable<Player> {
   public String player_name;
   public int number;

    @Override
    public int compareTo(Player object) {
        return this.player_name.compareTo(object.player_name);
    }
}

<强>排序

Player p[] = new Player[t];
// do stuff
Arrays.sort(p);

答案 3 :(得分:0)

最简单的方法是Player实施Comparable<Player>,并在compareTo(Player)内实施Player方法:

public int compareTo(Player player) {
  return this.number-player.number;
}

然后,无论您想要对数组进行排序,只需调用Arrays.sort(p);

即可

答案 4 :(得分:0)

您需要在数字变量上使用getter才能使其正常工作,例如:

public class Player {
   public String player_name;
   public int number;

   public int getNumber() {
       return number;
   }
}

然后,从Java 8开始,您可以使用Comparing工厂类对其进行排序:

Player[] p = new Player[t];
Arrays.sort(p, Comparator.comparingInt(Player::getNumber));

这将:

  • 通过不比较Comparator<Person>方法创建getNumber
  • 你在这里看到的是一个方法参考,它是lambda p -> player.getNumber()的简写,它将玩家映射到数字。