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) {

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