我有一个ArrayList.
每个元素都是HashMap我的值的查找.
其中一个值是数字.
我正在使用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
Run Code Online (Sandbox Code Playgroud)
所以我对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"));
}
});
Run Code Online (Sandbox Code Playgroud)
如何将字段accountBalance排序为数字?我怀疑这很重要,但我正在编写一个Android应用程序.
看起来你正在使用HashMap你应该设计自己的类的地方:
public class Account {
public final String name;
public final Double balance;
public Account(String name, Double balance) {
this.name = name;
this.balance = balance;
}
}
Run Code Online (Sandbox Code Playgroud)
(注意:目前这个类是不可变的.要使它变为可变,将字段从更改public final为private并添加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);
}
});
Run Code Online (Sandbox Code Playgroud)
注意使用Comparator带有泛型类型参数的a <Account>,因此您不必从中转换compareTo()参数Object.
| 归档时间: |
|
| 查看次数: |
2320 次 |
| 最近记录: |