当前位置: 首页 > 知识库问答 >
问题:

java的通用实现。util。Scala中的比较器

白星渊
2023-03-14

我正在使用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[_]]

否在twirl模板中,我正在尝试对其进行排序:

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

共有2个答案

贝财
2023-03-14

您可以将您的source转换为Scala集合类型,然后只需在其上调用. sortBy。不需要比较器s:

import collection.JavaConverters._
source.asScala.toSeq.sortBy(_.FooName)
徐昊焜
2023-03-14

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

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

或者类似的东西!

意思是:当列表包含Foo对象时,这些对象是从Object还是从FolBase派生出来有什么关系?!

 类似资料:
  • 我知道这些接口用于对集合中的对象进行排序。但我怀疑这两者的真正区别。我读到的一个事实是,如果要比较两个对象而不使用当前对象,请使用Compariable(此)。 但我的问题是即使使用比较器,我们也会比较相同的对象类型。 这里真正的区别是什么。我很困惑。假设下面的例子, 如果我使用比较器,我会让一个类实现比较器,而不是这个。年龄,它有人。年龄那么这里有什么不同呢? 我不知道Collections.s

  • 因此,我尝试将插入排序与必须传入的通用比较器一起使用。我无法更改方法名称。我如何实现一个比较器来传递到insertionSort方法中?我是java和面向对象编程的新手。 该测试只是一个junit测试。

  • 我正在尝试编写一个使用最小优先级队列的算法,所以我在谷歌上四处查看并找到了PriorityQueue。不过,似乎为了使用它,我需要告诉它我希望它如何排列优先级,并且这样做的方法是使用比较器(我想比较我的“Node1”对象的特定数据字段)。更多的谷歌搜索提出了创建一个新的比较器的想法,它实现了比较器但覆盖了比较方法。我正在尝试的是这样(以及它的其他变体): 编译器有几个理由提出抗议,其中之一是我没有

  • (如果这是重复的,请给我指出正确的答案!我搜索并阅读了几个( 显然,当集合类使用比较器时,它应该具有类型<代码>比较器,这是正确的做法 我的问题是使用,它是在

  • 嗨,我是贾维斯的新手。 我有一个实体,我正在为它实现一个自定义比较器,以便使用Javers进行比较。 我的实体:- 包装com.devyansh.entity; 进口java.util.清单; 导入组织。贾维斯。果心元模型。注释。实体 下面我注册了新的比较器:- 我的比较器实现:- 问题领域:- 每当我尝试使用以下行进行比较时:- Diff Diff=标枪。比较(new Ent(“aaa”,new

  • 我在理解和使用比较器方面有一个问题,有人问我以下问题: 我在一个单独的Employee类中使用compareTo比较器接口来调用比较器对象的重载使用。 任何帮助,建议,代码行将非常感谢!!