Generic implementation von java.util.Comparator in Scala



我正在使用Java和Scala的twirl模板。所以我正在尝试对模板中的列表进行排序,但我不知道如何覆盖比较器方法。

My List 包含类的对象,设计如下:

class Foo extends BaseFoo<Foo>

类 BaseFoo 确实有一个名为

public String FooName() {/*returns some Name of Foo*/}

在我的 scala 旋转模板中,它看起来像:

source: java.util.Collection[_ <: BaseFoo[_]]

没有在旋转模板中,我正在尝试对其进行排序:

@Collections.sort(
new util.ArrayList[_ <: BaseFoo[_]](source),
new Comparator[_ <: BaseFoo[_]] {
override def compare(o1: BaseFoo, o2: BaseFoo) = {
return o1.FooName.compareTo(o2.FooName);
}
})

但这似乎不能编译:

类类型是必需的,但 java.util.ArrayList[_ <: 找到 BaseFoo[_]]

不是直接答案,但鉴于您声明您有一个 Foo 对象列表,直接的解决方案似乎是使用

source: java.util.Collection[_ <: Foo[_]]

或类似的东西!

意思是:当列表包含Foo对象时,这些对象是来自对象还是FooBase有什么关系?!

您可以将source转换为 Scala 集合类型,然后只需调用.sortBy即可。无需Comparator

import collection.JavaConverters._
source.asScala.toSeq.sortBy(_.FooName)

最新更新