2014-03-27 98 views
-1

我有一个对象阵列等如何对对象数组进行排序?

Player p[] = new Player[t]; 

而且每个对象具有一个整数变量和名称变量。

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

从用户获得输入后,我怎么能根据它们的数量变量对这个对象数组进行排序?

+1

Ref。 HTTP://计算器。com/questions/2784514/sort-arraylist-of-custom-objects-by-property?rq = 1(这是一个List,然后参见[Arrays.sort](http://docs.oracle.com/javase/7) /docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator))) – user2864740

+1

阅读关于'Arrays.sort'和'比较器' –

+1

转动你的眼睛在右边,到“相关”部分,你会发现几十个重复的问题。 –

回答

0

最简单的方法是使Player实施Comparable<Player>,并执行内部PlayercompareTo(Player)方法:

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

然后,无论你想排序数组,只需ca LL Arrays.sort(p);

+0

请注意,这可能不适用于大数目的负值。更好地使用'Integer.compare' – Puce

0

创建一个实现Comparator<Player>的类,称为PlayerComparator。通过创建一个需要两个Playercompare method来实现该接口。根据第一个Player是否小于,等于或大于第二个Player,返回负数,零或正数。

然后,您可以创建您的PlayerComparator并将它(连同您的阵列)传递给Arrays.sort

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)); 
+0

用于在lambdas中进行思考的问题:) – mdm

0

让你自定义的类实现Comparable接口,然后你可以使用Java集合排序哟乌尔阵列(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); 
0

你需要对数可变吸气这个工作,如:

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()的缩写,它将玩家映射到数字。