簡體   English   中英

在HashMap的數組列表中排序

[英]Sorting in a Array List of HashMaps

我有一個數據結構,如下所示:

public class VResultSetBean {
   private ArrayList<RowBean> rowBeans; 
}

public class RowBean {
    private HashMap<String, Object> columns;
}

我需要根據HashMap columns鍵之一的值對rowBeans進行排序。 用Java做到這一點的最有效方法是什么?

使RowBean實現Comparable並實現compareTo方法以提取該鍵的值,並使用它來確定比較結果。

public class RowBean implements Comparable<RowBean> {

     private HashMap<String, Object> columns;

     @Override
     public int compareTo(RowBean other) {
          Object valOther = other.columns.get(...);
          Object valMine = columns.get(...);
          return comparison(valOther, valMine);
     }
}

一旦RowBean是可Comparable您可以使用以下方法進行排序:

 Collections.sort(rowBeans);

這是對我有用的最終代碼段。 多謝你們..

public class RowBean implements Comparable<RowBean> {
         HashMap<String, Object> columns;
        public int compareTo(RowBean other) {
             Object valOther = other.columns.get("CONVERSIONS");
             Object valMine = columns.get("CONVERSIONS");
             return comparison(valOther, valMine);
        }
        private int comparison(Object valOther, Object valMine) {
           if((Long) valMine > (Long)valOther) 
                return 1;
            else if((Long) valMine < (Long)valOther)
                return -1;
            else
                return 0;
        }
   }

首先,無法比較Object類的兩個對象,它們需要有一種比較的方法:這是實現Comparable接口。 因此您需要將columns更改為HashMap<String, Comparable>

之后,您可以向RowBean添加一個比較方法,如下所示:

class RowBean {

    private HashMap<String, Comparable> columns;

    public int compare(String column, RowBean other) {
        return columns.get(column).compareTo(other.columns.get(column));
    }

}

最后,要對列表進行排序,您可以使用匿名Comparator ,方法是:

List<RowBean> list = new ArrayList<>();

final String sortingColumn = "myColumn";

Collections.sort(list, new Comparator<RowBean>() {
    @Override
    public int compare(RowBean o1, RowBean o2) {
        return o1.compare(sortingColumn, o2);
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM