2011-09-30 59 views
2

我有一個ArrayList如何對存儲在散列表中的數值進行排序,然後在Java的ArrayList中對數值進行排序?

每個元素是一個HashMap查找我的值。

其中1個值是數字。

我使用Collections.sort()進行alpha排序。但是這些數字正在被alpha排序,而不是數字排序。

protected ArrayList<HashMap<String, String>> myAccountList; 

String Name = myAccountList.get(i).get("accountName"); 
Double balance = Double.valueOf(myAccountList.get("accountBalance")); //is a number stored as a string 

所以我對accountName的工作很好。

Collections.sort(myAccountList, new Comparator(){ 
    public int compare(Object o1, Object o2) { 
     HashMap<String,String> old1 = (HashMap<String, String>) o1; 
     HashMap<String,String> old2 = (HashMap<String, String>) o2; 
     return old1.get("accountName").compareToIgnoreCase(old2.get("accountName")); 
    } 
}); 

如何將字段accountBalance排序爲數字?我懷疑它的重要性,但我正在編寫一個Android應用程序。

+0

爲什麼不將餘額作爲「Double」存儲?例如,'HashMap ' –

+0

好的,我可以做到這一點。但是這種排序是什麼樣子?我該如何讓HashMap接受以及? – kireol

+0

如果你在地圖上持有字符串和雙打,你不能這樣做。你可以使用'HashMap '。 –

回答

5

它看起來像您使用的是HashMap,你應該設計自己的等級:

public class Account { 

    public final String name; 
    public final Double balance; 

    public Account(String name, Double balance) { 
     this.name = name; 
     this.balance = balance; 
    } 
} 

(注:目前這一類是immutable要使它變的,改變場從public finalprivate。並添加getter/setter方法)

然後你可以將它們存儲在List<Account>和排序相應:

//sort by name 
Collections.sort(myAccountList, new Comparator<Account>(){ 
    public int compare(Account acc1, Account acc2) { 
     return acc1.name.compareTo(acc2.name); 
    } 
}); 

//sort by balance 
Collections.sort(myAccountList, new Comparator<Account>(){ 
    public int compare(Account acc1, Account acc2) { 
     return acc1.balance.compareTo(acc2.balance); 
    } 
}); 

請注意,使用Comparator和泛型類型參數<Account>,因此您不必從Object投下compareTo()參數。

+0

Upvoted,因爲我有一個自定義比較器的東西;) – Zulaxia

2

你將不得不做這樣的事情:

Double.valueOf(old1.get("accountBalance")).compareTo(Double.valueOf(old2.get("accountBalance"))); 

由帳戶名和平衡兩者進行排序,你會檢查,如果第一次比較是0(它們是相等的),如果是,則返回accountBalance比較,假設您先按帳戶名稱進行排序。

相關問題