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

在JVM-Scala中,排序如何提供带有类型擦除的隐式排序[T]

范承志
2023-03-14
case class A(i: Int) extends Ordered[A] {
  def compare(that: A): Int = this.i compare that.i 
} 
Seq[A](A(2),A(1)).sorted // Seq(A(1),A(2)) Ordering will provide Ordering[A]
Seq[A](A(2),A(1)).sorted(Ordering[A]) // Seq(A(1),A(2))

排序伴随对象为可迭代[A]提供隐式排序[T]

我的问题是:排序对象如何将排序[T]提供给排序

因为[T]将被JVM删除,并且不可能知道

共有1个答案

沈良策
2023-03-14

怎么能起作用?

含义是编译时特性。也就是说,当您编译代码时,编译器强制执行需要签出的规则。在这种特殊情况下,ordering[Int]类型的隐式需要在作用域中可用,否则将出现编译错误。

这意味着,在运行时,即使类型被删除,您也可以保证有排序[Int]可用,即使它看起来像排序(OBJ:Object),但您已经保证它能够排序底层的Int对象,否则这些对象将不允许您的代码编译。

 类似资料:
  • 阅读Spark method sortByKey: 是否可能只返回“N”个数量的结果。因此,与其返回所有结果,不如返回前10名。我可以将已排序的集合转换为数组,并使用方法,但既然这是一个O(N)操作,有没有更有效的方法?

  • 我有一个返回泛型的函数: 所以,当我试图匹配一个函数结果时,我的问题是: 我得到一个警告:“类型模式数组[CustomerInfo到[CustomerApplication到]]中的非变量类型参数CustomerApplication-DDTO未选中,因为它已被擦除消除。” 这是否意味着在Array[]中可以得到任何类型的数组?所以我已经阅读了关于ClassTag和TypeTag的文章,但是误解了

  • 我有一个名为map的HashMap,它将字符存储为键,将整数存储为值,然后使用以下代码将其存储到名为entries的ArrayList中: 现在我正在尝试根据整数值而不是键对这些条目进行排序。我试图使用一个lambda表达式来实现比较器接口,但它不起作用。这是我的代码: 以下是我得到的错误: 这一行有多个标记 > 语法错误,插入“)”以完成表达式 类型集合中的方法sort(列表,比较器)不适用于参

  • hybris为面值提供了Solr Sort属性。我可以在HMC中看到每个solr项属性,我们可以设置它的排序行为。 我想用弹劾来设定这种类型。有一个属性(字符串类型),它保存着所选提供者的值,因为我必须在Impex中提供字符串类型,这样它才能工作。 请帮忙。

  • 我正在研究javaFx应用程序,并创建了一个tableview,拥有大约10万+行和10列。 编辑: 在这个链接中,我使用的是示例13.8,http://docs.oracle.com/javafx/2/ui_controls/table-view.htm只添加了几行代码,通过生成随机数据,只添加了100,000行。

  • 问题内容: 我正在尝试通过sequelize从数据库中输出所有对象列表,如下所示,并希望在我在where子句中添加id时对数据进行整理。 但是问题是渲染后,所有数据按如下进行整理。 正如我发现的那样,它既没有按ID也没有按名称排序。请帮我解决。 问题答案: 在序列化中,您可以轻松添加order by子句。 看看我如何添加对象数组? 编辑: 一旦在诺言中收到对象,您可能必须订购这些对象。查看有关根据