以下に示すようなデータ構造があります。
public class VResultSetBean {
private ArrayList<RowBean> rowBeans;
}
public class RowBean {
private HashMap<String, Object> columns;
}
rowBeans
HashMap のいずれかのキーの値に基づいて並べ替える必要がありますcolumns
。Javaでこれを行う最も効率的な方法は何ですか?
以下に示すようなデータ構造があります。
public class VResultSetBean {
private ArrayList<RowBean> rowBeans;
}
public class RowBean {
private HashMap<String, Object> columns;
}
rowBeans
HashMap のいずれかのキーの値に基づいて並べ替える必要がありますcolumns
。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);
まず、 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);
}
});