2015-10-31 36 views
1

我很新的Java時,我纔剛剛開始學習它爲我的計算機科學大學課程。Java - 如何排序這個ArrayList?

我正在寫一個程序,有一個ArrayList持有Personality對象稱爲individual,在PersonalityList類中聲明這樣:private ArrayList<Personality> individual;

這些Personality對象保存稱爲int類型的votes私有字段。 rankedList - -

我也曾在PersonalityList類,但用不同的名稱聲明相同ArrayList像這樣:private ArrayList<Personality> rankedList;

在我的節目,我得到一個名爲top(int value)方法。在這種方法中,我試圖用while循環通過individual名單看​​,獲得從該列表中的對象提供的索引數量低於value參數的值,將其添加到rankedList列表,然後排序在rankedList列表爲了他們的votes領域,與得票最高數量來第一次在列表中的對象(索引: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."); 
    } 
} 

我目前印刷用getDetails()方法while循環得到每個Personality對象的詳細信息(包含對象字段)在Personality類中定義,簡單地檢查它會獲得正確數量的對象。

我知道我需要使用Collections.sort功能來查看其他堆棧溢出帖子,但是,即使在查看這些帖子的答案後,我也不知道如何將其實施到我的代碼中。我已經嘗試過,但我不斷收到錯誤,我不明白。

任何幫助,優選特定的代碼,將是非常理解的。謝謝!


UPDATE:

感謝您的示例代碼@camickr。 在我的個性I類添加以下代碼:

static class votesComparator implements Comparator<Personality> 
{ 
    public int compare(Personality p1, Personality p2) 
    { 
    return p1.getVotes() - p2.getVotes(); 
    } 
} 

我還編輯我top方法在我PersonalityList類這樣的:

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."); 
} 

但是現在我就在其中指出的錯誤「找到的排序(java.util.List中)」沒有合適的方法,稱爲在Collection.sort(rankedList)。 這是什麼原因?

+2

兩種方法..試試這個http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/ – RamPrakash

回答

2

您發佈的代碼無關與排序。重要的代碼是你的Personality類。您可以:

  1. 需要實現你的類或
  2. 可比創建一個自定義比較

下面是一個例子兩種方法的顯示例子:

/* 
** Use the Collections API to sort a List for you. 
** 
** When your class has a "natural" sort order you can implement 
** the Comparable interface. 
** 
** You can use an alternate sort order when you implement 
** a Comparator for your class. 
*/ 
import java.util.*; 

public class Person implements Comparable<Person> 
{ 
    String name; 
    int age; 

    public Person(String name, int age) 
    { 
     this.name = name; 
     this.age = age; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public int getAge() 
    { 
     return age; 
    } 

    public String toString() 
    { 
     return name + " : " + age; 
    } 

    /* 
    ** Implement the natural order for this class 
    */ 
    public int compareTo(Person p) 
    { 
     return getName().compareTo(p.getName()); 
    } 

    static class AgeComparator implements Comparator<Person> 
    { 
     public int compare(Person p1, Person p2) 
     { 
      return p1.getAge() - p2.getAge(); 
     } 
    } 

    public static void main(String[] args) 
    { 
     List<Person> people = new ArrayList<Person>(); 
     people.add(new Person("Homer", 38)); 
     people.add(new Person("Marge", 35)); 
     people.add(new Person("Bart", 15)); 
     people.add(new Person("Lisa", 13)); 

     // Sort by natural order 

     Collections.sort(people); 
     System.out.println("Sort by Natural order"); 
     System.out.println("\t" + people); 

     // Sort by reverse natural order 

     Collections.sort(people, Collections.reverseOrder()); 
     System.out.println("Sort by reverse natural order"); 
     System.out.println("\t" + people); 

     // Use a Comparator to sort by age 

     Collections.sort(people, new Person.AgeComparator()); 
     System.out.println("Sort using Age Comparator"); 
     System.out.println("\t" + people); 

     // Use a Comparator to sort by descending age 

     Collections.sort(people, Collections.reverseOrder(new Person.AgeComparator())); 
     System.out.println("Sort using Reverse Age Comparator"); 
     System.out.println("\t" + people); 
    } 
} 
+1

好的w如有可能,請更換具有個性的人員。 – RamPrakash

+1

@RamPrakash,這是留給OP。答案的目的不是提供代碼,而是通過展示概念來指出OP的正確方向。他們應該能夠弄清楚如何針對他們的特定要求定製代碼。 – camickr

+0

現在看到您的解釋,它的工作原理 – RamPrakash

1
Collections.sort(rankedList,new Comparator<Personality>(){ 
        public int compare(Personality p1,Personality p2){ 
          // Write your logic here. 
        }});