Scala中的通用实现von java.util.Comparator

时间:2018-06-22 09:13:28

标签: java scala twirl

我正在Java和Scala中使用旋转模板。因此,我正在尝试对模板中的列表进行排序,但我不知道如何覆盖Comparator方法。

我的列表包含设计如下类的对象:

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 [_]]

2 个答案:

答案 0 :(得分:0)

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

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

或类似的东西!

含义:当列表中包含Foo对象时,这些对象是从Object还是从FooBase继承而来的,又有什么关系呢?!

答案 1 :(得分:0)

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

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