播放框架(java)-Treemap.zipWithIndex排序顺序未保留

播放框架(java)-Treemap.zipWithIndex排序顺序未保留,java,scala,sorting,playframework,Java,Scala,Sorting,Playframework,我正在使用java的Play框架(2.5.4和scala 2.11.8)。当我离开控制器时,我有一个java.util.TreeMap(带有一个可比较的键)被正确排序,但是当在视图端使用zipWithIndex函数时,排序顺序不保留,并且映射以插入顺序遍历。但是,我也需要该循环中元素的索引。你知道为什么zipWithIndex不保留顺序(即使javadoc这么说),或者其他建议在scala模板中使用循环计数器吗 在scala head中,我有一个变量定义为(MyComparableKey实现了可

我正在使用java的Play框架(2.5.4和scala 2.11.8)。当我离开控制器时,我有一个java.util.TreeMap(带有一个可比较的键)被正确排序,但是当在视图端使用zipWithIndex函数时,排序顺序不保留,并且映射以插入顺序遍历。但是,我也需要该循环中元素的索引。你知道为什么zipWithIndex不保留顺序(即使javadoc这么说),或者其他建议在scala模板中使用循环计数器吗

在scala head中,我有一个变量定义为(MyComparableKey实现了可比较的接口,在对其执行foreach时没有问题,所有内容都保持排序)

在de模板中,我将其用于:

@for(((k, values), i) <- results.zipWithIndex) {
     @* the keys are traversed in insertion order *@
}

((k,值),i)的
zipWithIndex
方法是通过对Scala Iterable的隐式转换提供的。我怀疑在进行转换时丢失了一些有关具体类型的信息。您认为可以尝试使用
Scala.collection.immutable.TreeMap
并查看其是否有效吗?也许这个答案可以帮助您:尝试我需要索引,因为我有一个包含复杂对象列表的表单对象,并使用索引来知道我必须显示的关于每个键的列表(来自表单)。最后,我使用了一个额外的列表来保持列表索引和映射键之间的映射(相当讨厌,但找不到其他方法)
zipWithIndex
方法是通过对Scala Iterable的隐式转换提供的。我怀疑在进行转换时丢失了一些有关具体类型的信息。您认为可以尝试使用
Scala.collection.immutable.TreeMap
并查看其是否有效吗?也许这个答案可以帮助您:尝试使用e按照链接中的指定,在scala模板中进行显式转换,但没有成功…我需要索引,因为我有一个包含复杂对象列表的form对象,并使用索引来了解必须显示的关于每个键的列表(来自表单)。最后,我使用了一个额外的列表来保持列表索引和映射键之间的映射(相当讨厌,但找不到其他方法)
@for(((k, values), i) <- results.zipWithIndex) {
     @* the keys are traversed in insertion order *@
}