@for迭代在有序地图上的keySet()不遵守顺序

时间:2013-07-14 07:16:26

标签: java playframework playframework-2.1

我用Java编写我的模型,控制器等。

我有一个包含SortedMap<String, Foo>的数据模型。地图实现类是TreeMap

如果在模板中,我会渲染地图的值(使用其toString()),如下所示:

@theSortedMap.keySet()

...然后以预期的升序顺序打印出值。

但是,如果我使用@for构造:

@for(keyValue <- theSortedMap.keySet()) {
  @keyValue <br>
}

...然后迭代顺序变得不可预测。

如何迭代地图的键以保持所需的迭代顺序?

(这是预期的吗?或者这是Play中的错误吗?)

2 个答案:

答案 0 :(得分:5)

有同样的问题。解决了这个问题

@for((key, value) <- map) {
    <span>@key</span><span>@value</span>
}

答案 1 :(得分:1)

它与如何通过隐式转换将java集合转换为scala集合有关。似乎地图只会转换为普通scala地图,无论它们是否已排序。

绕过这个的一种方法是使用这个构造迭代集合的迭代器:

@theSortedMap.keySet.iterator.map { key => <li>@key</li>}