2015-10-19 46 views
1

我想創建一個具有多種類型對象的列表。所以,我已經建立了這個代碼:如何訂購具有多種類型對象的ArrayList

List<Entrate>lista = modelManager.getEntrataManager().getEntrate(); 
List<NotaSpese>listaSpese=modelManager.getNotaSpesaManager().getNotaSpese(); 

List<Object> listaMovimenti = new ArrayList<Object>(); 
listaMovimenti.addAll(lista); 
listaMovimenti.addAll(listaSpese); 

現在我想通過Entrate和NotaSpese領域數據訂購此集合。

如何訂購清單?

+2

實現[Comparator](https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html),並調用[Collections.sort](https:// docs。 oracle.com/javase/8/docs/api/java/util/Collections.html#sort-java.util.List-java.util.Comparator-)。 – GriffeyDog

+0

所以,我應該實現Entrata和NotaSpese類的比較器? – bircastri

+0

是的。但你最好弄清楚你的對象模型。它不建議有列表 user1697575

回答

5

使用自定義comparator

final class CustomComparator implements Comparator<Object> { 
    @Override 
    public int compare(Object o1, Object o2) { 
     // implement some logic for comparing and return an int value here 
    } 
} 

然後你就可以簡單的使用方法Collections.sort

List<Object> listaMovimenti = ... 
Collections.sort(listaMovimenti, new CustomComparator()); 
0

嗯,首先它與混合型不可取的,有收藏。

但在你的情況下,你應該爲集合中的每種類型實現Comparable接口。或者,你可以創建一個Comparator,在排序過程中調用它來比較你的不同類型。

然後你就可以用Collections.sort

0

排序我個人有兩個EntrateNotaSpese是相互媲美,如果是一般的用法:

class Entrate implements Comparable<Entrate>, Comparable<NotaSpece> { 
    //Implementation with the comparers 
} 

class NotaSpese implements Comparable<Entrate>, Comparable<NotaSpece> { 
    //Implementation with the comparers 
} 

調用Collections.sort(listaMovimenti)然後將使用appropirate comparers。

希望我沒有錯過任何東西。

相關問題