如何对存储在散列映射中的数值进行排序,然后在Java中的ArrayList中进行排序?

kir*_*eol 2 java android

我有一个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应用程序.

Pau*_*ora 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

(注意:目前这个类是不可变的.要使它变为可变,将字段从更改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);
   }
});
Run Code Online (Sandbox Code Playgroud)

注意使用Comparator带有泛型类型参数的a <Account>,因此您不必从中转换compareTo()参数Object.