Java LinkedHashMap не поддерживает порядок вставки при зацикливании в шаблоне Play Framework 2.0
В игровом контроллере (2.0) приложения Framework я создаю Java LinkedHashMap<String, List<MyObject>)
поддерживать порядок, в котором я вставляю строковый ключ.
Я попытался повторить этот LinkedHashMap в шаблоне, как показано ниже:-
@for(currentKey <- linkedHashMapInstance.keySet()){
....
loop myObjectList for the currentKey
....
}
Я получаю случайный порядок всякий раз, когда обновляю экран.
Затем я попытался изменить логику
@for((currentKey , currentList) <- mapOfCards){
.. used the key and the list
}
Теперь я получаю непротиворечивый порядок, но не тот порядок, который я вставил. Журнал отладки на стороне сервера показывает правильный порядок.
Я предполагал, что LinkedHashMap в Java будет поддерживать порядок вставок, даже если он отображается в шаблоне scala.
Я что-то здесь не так делаю?
2 ответа
Я столкнулся с той же проблемой несколько месяцев назад. Как отметил @nico_ekito, это проблема, связанная с преобразованием Java->Scala.
Чтобы это исправить, попробуйте что-то вроде этого:
@for((currentKey , currentList) <- SortedMap.empty[String, String] ++ mapOfCards) {
}
заменив [String, String]
по типам вашего (currentKey , currentList)
,
Надеюсь, что это помогает, это сработало для меня.
Это может быть связано с преобразованием Java->Scala.
Попробуйте использовать .asScala
как это:
@for((currentKey , currentList) <- mapOfCards.asScala){
..
}
Обновить:
Работает с:
@for((currentKey , currentList) <- scala.collection.mutable.LinkedHashMap.empty[String, String] ++ mapOfCards) {
}