Управляет ли Java порядком ключей в карте перед отправкой через REST Api? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть LinkedHashMap, в котором есть пара ключ (строка) и значение (список некоторых объектов).Порядок ключей действителен до оператора возврата.После получения его в конце пользовательского интерфейса порядок клавиш, похоже, изменился.

Играет ли здесь роль java?Если да, как это исправить?Я хочу ту же последовательность на UI, который возвращается из базы данных.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Документация LinkedHashMap

Реализация хеш-таблицы и связанного списка интерфейса Map с предсказуемым порядком итераций.Эта реализация отличается от HashMap тем, что поддерживает двусвязный список, проходящий через все его записи. Этот связанный список определяет порядок итераций, который обычно является порядком, в котором ключи были вставлены в карту (порядок вставки). Обратите внимание, что порядок вставки не изменяется, если ключ повторно вставляется в карту,(Ключ k повторно вставляется в карту m, если m.put (k, v) вызывается, когда m.containsKey (k) возвращает true непосредственно перед вызовом.)

LinkedHashMap в Java будет поддерживать порядок для вставки.Если вы прочитаете пары ключ-значение из упорядоченного списка и вставите его в LinkedHashMap в том же порядке, то расположение будет сохранено.

Тем не менее, если вы читаете это из JSON, то порядок пар следует считать неупорядоченным

Из спецификации JSON RFC 8259 :

Объект - это неупорядоченная коллекция из нуля или более пар имя / значение, где имя - это строка, а значение - строка, число, логическое значение, ноль, объектили массив.

Далее:

Библиотеки синтаксического анализа JSON различаются в зависимости от того, делают ли они упорядочивание членов объекта видимым для вызывающего программного обеспечения.Реализации, поведение которых не зависит от порядка членов, будут взаимодействовать в том смысле, что на них не будут влиять эти различия.

Если вам нужен обходной путь, вы можете следовать ответу, предоставленному clayton.carmo .Этот обходной путь работает путем преобразования формы JSON object в JSON array объектов значения ключа.Это гарантированно для поддержания порядка.Из документации RFC:

Массив - это упорядоченная последовательность из нуля или более значений.

0 голосов
/ 11 октября 2018

Даже если вы отправите его в порядке, объект JSON может не поддерживать порядок атрибутов.Если вам нужна упорядоченная последовательность элементов, отправьте список с четко определенными объектами.

Например, вместо этого:

{
  "0": ["a0", "b0", "c0"],
  "1": ["a1", "b1", "c1"]
}

Используйте что-то вроде этого:

[
  {
    "key": 0,
    "value": ["a0", "b0", "c0"]
  },
  {
    "key": 1,
    "value": ["a1", "b1", "c1"]
  }
]
...