按键值排序列表<HashMap <String,Object >>

问题描述 投票:0回答:2

我有一个这种类型的列表List < HashMap < String, Object >> ResultSet

public List ResultSetToMap(ResultSet rs) throws SQLException {
    ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();

    while (rs.next()) {
        row = new HashMap<String, Object>(columns);
        for (int i = 1; i <= columns; ++i) {
            row.put(md.getColumnName(i), rs.getObject(i));
        }
        list.add(row);
    }
    return list;
}

我想按“PROBABILITY”键的值对列表值进行排序。当我打印键及其值时,我得到了这个:

l_commitdate=1996-02-12
l_partkey=155190
PROBABILITY=56.63499683535207
l_commitdate=1996-02-28
l_partkey=67310
PROBABILITY=49.93142590485798
l_commitdate=1996-03-05
l_partkey=63700
PROBABILITY=56.88804620364059
l_commitdate=1996-03-30
l_partkey=2132
PROBABILITY=55.511179358539486

我想得到这个:

l_commitdate=1996-03-05
l_partkey=63700
PROBABILITY=56.88804620364059
l_commitdate=1996-02-12
l_partkey=155190
PROBABILITY=56.63499683535207
l_commitdate=1996-03-30
l_partkey=2132
PROBABILITY=55.511179358539486
l_commitdate=1996-02-28
l_partkey=67310
PROBABILITY=49.93142590485798
java hashmap
2个回答
0
投票

假设概率值是double类型:

list.sort((p1,p2)-> Double.compare( (double)p2.get("PROBABILITY"),(double) p1.get("PROBABILITY")));

0
投票

看起来你知道你的ResultSet中每一行的结构,所以如果你创建一个对象代表每一行而不是使用Map<String, Object>,事情就会变得容易多了。我称之为Part,因为这是关键所指的内容,但无论如何都要称之为有意义。

public class Part {
    private LocalDate commitDate;
    private long partKey;
    private BigDecimal probability;

    //getters and setters
}

有了这个你可以改变你的方法来返回一个Parts列表(作为一个旁边:你不应该在这里使用无类型列表。即使你不遵循我的其他建议,你的方法签名应该始终有一个类型为正在返回的List.Java方法名称也应该以小写字符开头 - 按照惯例,只有classes的名称以大写字母开头)。

public List<Part> resultSetToParts(ResultSet rs) throws SQLException {
    List<Part> list = new ArrayList<>(); //No need to specify the generic type again, we can use the diamond operator for Java 7 and later

    while (rs.next()) {
        Part part = new Part();

        part.setCommitDate(rs.getDate("l_commitdate").toLocalDate()); //Note: this is vulnerable to NullPointerExceptions if the date can be null
        part.setPartKey(rs.getString("l_partkey"));
        part.setProbability(BigDecimal.valueOf(rs.getDouble("PROBABILITY")));

        list.add(part);
    }
    return list;
}

既然我们已经完成了少量的工作来设置它,你可以在任何你想要的领域轻松地对它进行排序:

List<Part> parts = resultSetToParts(rs);
parts.sort(Comparator.comparing(Part::getProbability);
© www.soinside.com 2019 - 2024. All rights reserved.