繁体   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