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