Как сделать заказ с набором результатов?

Я хочу сделать таблицу лидеров с помощью 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"));
}

Нет сообщения об ошибке.

Я уже пробовал в разделе «SQL» PHPMyAdmin, и я получаю ожидаемый результат.

Пример таблицы:

    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 (у хэш-карты нет никакого порядка).

Какую List реализацию вы используете? Он может не отслеживать порядок размещения.

Andronicus 08.04.2019 11:09

попробуйте SELECT player_name, убивает ОТ игроков ORDER BY убивает DESC без ограничений. не уверен, что это поможет, но стоит попробовать, я думаю

Alan 08.04.2019 11:09

@ Алан, лимит не должен мешать этому.

lealceldeiro 08.04.2019 11:10

Вы пытались распечатать результаты внутри цикла while, чтобы убедиться, что они верны? Как указал @Andronicus, это может быть вызвано неправильной реализацией List

Amongalen 08.04.2019 11:10

@lealceldeiro я знаю. но кто знает, может быть, это одна из тех странных вещей

Alan 08.04.2019 11:11

результат SQL-запроса в порядке?.. в чем проблема? в списке SQL или Java?

Peter Ksenak 08.04.2019 11:11

но ждать. я вижу, что он использует реализацию карты. может в этом причина

Alan 08.04.2019 11:11
player_list.put похоже, что вы используете карту для хранения результатов, а не список, карта не имеет порядка (в большинстве случаев).
luk2302 08.04.2019 11:11

@luk2302 точно

Alan 08.04.2019 11:11

@ Алан, ты попал в точку, чувак. Кажется, это проблема

lealceldeiro 08.04.2019 11:12

КЛЮЧЕВОЙ (каламбур) вопрос: можем ли мы найти способ сделать это, сохранив реализацию его карты? потому что изменение всего на тип списка может испортить весь его код (конечно, в зависимости от реальной ситуации)

Alan 08.04.2019 11:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
11
157
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Совершенно очевидно, что player_list, который вы используете, не является List. С методом put() и двумя аргументами это выглядит как Map.

Если вы используете HashMap, неудивительно, что порядок произвольный — HashMap не сохраняет никакого порядка.

Вам может понадобиться LinkedHashMap или вообще другая структура данных, например пользовательский объект, который вы затем фактически сохраните в списке, а не на карте.

Исходный вопрос хотел бы прокомментировать: он отлично работает с LinkedHashMap! Тема раскрыта!

Ole V.V. 08.04.2019 12:02

Я думаю, что проблема связана с player_list, который представляет собой несортированную реализацию карты. Если вы хотите сохранить порядок вставок на карте, используйте LinkedHashMap.

Является ли player_list объектом хэш-карты? Hashmap не поддерживает порядок вставленных значений. Вместо этого попробуйте использовать LinkedHashMap или TreeMap.

Другие вопросы по теме