【发布时间】:2016-02-01 03:53:41
【问题描述】:
我是 Java 的新手,我才刚刚开始为我的计算机科学大学课程学习它。
我正在编写一个具有 ArrayList 的程序,其中包含名为 individual 的 Personality 对象,在 PersonalityList 类中声明如下:private ArrayList<Personality> individual;
这些Personality 对象包含一个名为votes 的私有字段,类型为int。
我还在 PersonalityList 类中声明了相同的 ArrayList,但名称不同 - rankedList - 就像这样:private ArrayList<Personality> rankedList;
在我的程序中,我创建了一个名为top(int value) 的方法。在这种方法中,我尝试使用 while 循环查看 individual 列表,从该列表中获取对象,前提是它们的索引号低于 value 参数的值,然后将其添加到 rankedList 列表中,然后然后按照votes 字段的顺序对rankedList 列表进行排序,获得最高票数的对象排在列表的首位(索引:0)。目前,这是我的top 方法:
public void top(int value)
{
int index = 0;
int listSize = individual.size();
rankedList = new ArrayList<Personality>();
if(value > listSize) {
value = listSize;
}
else {
System.out.println("Error: Enter a positive integer value.");
}
if(listSize > 0) {
while(index < value) {
Personality prsn = individual.get(index);
rankedList.add(prsn);
System.out.println(prsn.getDetails());
index++;
}
}
else {
System.out.println("Error: The array list has no personalities stored inside it.");
}
}
我目前正在使用Personality 类中定义的getDetails() 方法(包含对象字段)打印由while 循环获得的每个Personality 对象的详细信息,只是为了检查它是否获得了正确的数量对象。
我知道我需要通过查看其他 Stack Overflow 帖子来使用 Collections.sort 功能,但是,即使在查看了这些帖子的答案之后,我也不知道如何在我的代码中实现它。我已经尝试过,但我不断收到一些我不太理解的错误。
任何帮助,最好是具体的代码,将不胜感激。谢谢!
更新:
感谢@camickr 的示例代码。 在我的 Personality 类中,我添加了以下代码:
static class votesComparator implements Comparator<Personality>
{
public int compare(Personality p1, Personality p2)
{
return p1.getVotes() - p2.getVotes();
}
}
我还在PersonalityList 类中将top 方法编辑为:
if(listSize > 0) {
while(index < value) {
Personality prsn = individual.get(index);
rankedList.add(prsn);
System.out.println(prsn.getDetails());
index++;
}
Collections.sort(rankedList);
System.out.println("Sort by Natural order");
System.out.println("\t" + people);
}
else {
System.out.println("Error: The array list has no personalities stored inside it.");
}
但是现在我收到一条错误消息,指出“没有找到适合 sort(java.util.List) 的方法”,调用地址为 Collection.sort(rankedList)。
这是什么原因?
【问题讨论】:
-
两种方法..试试这个mkyong.com/java/…
标签: java sorting object arraylist collections