2013-02-19 70 views
2

我正在使用一個報告模塊來顯示花費的時間和任務數量。這些值在Java Bean中設置,並且bean對象存儲在一個數組中。我使用單獨的查詢來獲取時間和任務數量。現在,我必須根據時間和任務數量對數組進行排序。下面 的代碼只比較字符串:對Java中的對象數組進行排序

if (!list.isEmpty()) { 
    Collections.sort(list, new Comparator<Project>() { 
     @Override 
     public int compare(Project p1, Project p2) { 

      return p1.getName().compare(p2.getName()); 
     } 
     }); 
    } 

我在排序存儲在一個array.Any幫助感激在的JavaBean的屬性的整數值的問題。

+0

你綁排序整數數組,你可以使用'Arrays.sort(INT []一)' – Shivam 2013-02-19 09:26:01

+0

那麼是什麼陣是什麼樣子? – Jason 2013-02-19 09:26:11

+0

'Integer'和'Date'都有一個'compareTo'方法,你不能使用它們嗎? – sp00m 2013-02-19 09:28:57

回答

5

在下面的問題,你的意見,你說你有:

Project[] array = new Project[3]; 

如果我是你,我會宣佈Project作爲

public class Project implements Comparable<Project> { 

    @Override 
    public int compareTo(Project other) { 
     return this.id - other.id; // or whatever property you want to sort 
    } 

然後你可以通過簡單地呼叫

Arrays.sort(array); 

如果你不想讓你的類實現Comparable界面,您可以通過比較來Arrays.sort()

Arrays.sort(array, new Comparator<Project>() { 
     @Override 
     public int compare(Project o1, Project o2) { 
      return o1.id - o2.id; // or whatever property you want to sort 
     } 
    }); 

我用了一個匿名的一個,你也可以,如果需要在其他地方解壓到它自己的類。

+0

正是我搜索的...感謝jlordo的大力幫助.. – santhosh 2013-02-19 10:17:33

0

如何像:

Project[] project = ..initialise array; 

List<Project> projectList = Arrays.asList(project); 
Collections.sort(projectList, new Comparator<Project>() { 
    @Override 
    public int compare(Project p1, Project p2) { 
     if(p1.getIntProperty() == p2.getIntProperty()) return 0; 
     return p1.getIntProperty() > p2.getIntProperty() ? 1 : -1; 
    } 
    }); 
} 
+1

如果兩個值相等會發生什麼? – Jason 2013-02-19 09:28:13

+2

如果兩個值相等會怎樣?你永遠不會返回'0'。 – 2013-02-19 09:28:33

+0

平等呢? – 2013-02-19 09:29:50

0

試試這個爲整數

return(p1.getIntProperty() - p2.getIntProperty()); 
0

你有沒有考慮比較器和Java中可比接口進行排序。您可以使用compare()方法比較數組中的元素並相應地對它們進行排序。您檢查這個帖子裏同樣的問題已經answerd Sort Java Collection

0

你可以通過比較來Arrays.sort()

Arrays.sort(array, new Comparator<Project>() { 
    @Override 
    public int compare(Project o1, Project o2) { 
     return o1.id - o2.id; // or whatever property you want to sort 
    } 
}); 
0

假設你有一個List<Project>,你在Java8(因爲你可以使用lambda expression的比較)需要的是:

Collections.sort(list, (o1, o2) -> o1.getName().compareTo(o2.getName())); 

而且列表有一個排序(比較器)的方法,所以你可以進一步縮短:

list.sort((o1, o2) -> o1.getName().compareTo(o2.getName())); 

有了方法引用它變得更清潔:

list.sort(Comparator.comparing(Project::getName)); 
+0

誰在使用公共領域? – shmosel 2017-06-14 07:58:01

+0

假設。但你是對的,我編輯了答案。謝謝。 – Stas 2017-06-14 08:19:34

+0

我還是很困惑。所有的解決方案都使用訪問器方法。你的意思是方法引用? – shmosel 2017-06-14 16:17:01