[英]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.