如何根据结果集排序?

时间:2019-04-08 09:07:26

标签: java sql

我想用SQL排行榜。 因此,在我的情况下,我必须与kills一起订购才能对结果进行排序。

但是在结果集的情况下,顺序是错误的。

HashMap<String, Integer> player_list = new HashMap<>();
preparedStatement = this.pvpBox.getDtb().getConnection().prepareStatement(
    "SELECT player_name, kills FROM players ORDER BY kills DESC LIMIT 10");
ResultSet resultSet = preparedStatement.executeQuery();

while (resultSet.next()) {
    player_list.put(resultSet.getString("player_name"), resultSet.getInt("kills"));
}

没有错误消息。

我已经在PHPMyAdmin的“ SQL”部分中尝试过,并且得到了预期的结果。

表格示例:

    player_name     kills
    player1         40
    player2         20
    player3         50
    player4         10
    player5         30

实际结果:

    player_name     kills
    player5         30
    player1         40
    player4         10
    player2         20
    player3         50

预期结果:

    player_name     kills
    player3         50
    player1         40
    player5         30
    player2         20
    player4         10

我正在使用Java 8和Apache 2。

解决方案:使用LinkedHashMap而不是HashMap(哈希映射没有任何顺序)。

3 个答案:

答案 0 :(得分:3)

您正在使用的resizeMode : 'contain'显然不是player_list。使用List方法和两个参数,它看起来像put()

如果您使用的是Map,难怪该顺序是任意的-HashMap不会保留任何顺序。

您可能希望使用HashMap或其他数据结构,例如自定义对象,然后将其实际存储在列表中,而不是在地图中。

答案 1 :(得分:1)

player_list是哈希表对象吗? Hashmap不会保持插入值的顺序。请尝试使用LinkedHashMap或TreeMap。

答案 2 :(得分:0)

我认为问题出在player_list,这是未排序的地图实现。如果要保留地图中插入的顺序,请使用LinkedHashMap。