1

以下に示すようなデータ構造があります。

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

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

rowBeansHashMap のいずれかのキーの値に基づいて並べ替える必要がありますcolumns。Javaでこれを行う最も効率的な方法は何ですか?

4

3 に答える 3

6

そのキーの値を取り出して比較結果を判定するメソッドを実装して実装してRowBeanください。ComparablecompareTo

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);
     }
}

一度RowBeanComparable次を使用して並べ替えることができます:

 Collections.sort(rowBeans);
于 2013-08-20T11:59:50.040 に答える
0

まず、 class の 2 つのオブジェクトを比較する方法はありません。比較Objectする方法が必要です。これは、 interface を実装しています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));
    }

}

最後に、リストを並べ替えるには、次のように anonym を使用できます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);
    }
});
于 2013-08-20T12:04:50.560 に答える