Scala 中未绑定的可比较排序

2024-02-26

我对 Scala 中的排序有点熟悉Ordering的,但是我想对 Java 中定义的一些对象进行排序。他们是Comparable (not Comparable[T]) and final:

final class Term implements Comparable { ... }

(这实际上是Lucene的Term类,不,我不能改变Lucene的版本)。

我首先希望有一个隐含的地方:

terms.sorted //fail - no implicit ordering

那么也许我可以订购它?

class OrderedTerm extends Term with Ordering[Term] //fail - class is final

在此之后我想我会诉诸使用的肮脏java.util.Collections.sort:

Collections.sort(terms) // error: inferred type arguments [org.apache.lucene.index.Term] do not conform to method sort's type parameter bounds [T <: java.lang.Comparable[_ >: T]]

所以看来这也不起作用,因为 Scala 对它的类型参数很严格。此时我可以看到两种方法:重新实现另一个显式排序(不好)或用 Java 编写排序(没那么糟糕)。

有没有办法在 Scala 中干净地做到这一点?我认为这种情况在使用遗留 Java 对象时可能很常见?


Ordering(相对于Ordered) 与比较类型分开。相当于javaComparator, not Comparable。所以你只需将Terms上的ordering定义为单例,继承就没有问题Term.

implicit object TermOrdering extends Ordering[Term] {
  def compare(t1: Term, t2: Term: Term): Int = ....
}

最好将其标记为隐式,因为将其置于隐式范围内会很方便。那么你只需要确保TermOdering当您调用某些需要它的操作时会导入。

附:你应该读一下这篇很棒的文章answer https://stackoverflow.com/questions/4465948/what-are-scala-context-and-view-bounds/4467012#4467012作者:丹尼尔·索布拉尔。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 中未绑定的可比较排序 的相关文章

随机推荐

  • 用于验证最大长度为 10 个字符的整数的正则表达式

    您能给我指出用于验证最大长度为 10 个字符的整数的适当正则表达式吗 有效号码包括 1234567890 不要忘记整数can为负 s 0 9 1 10 s 各部分的含义如下 匹配必须从字符串开头开始 s Any whitespace cha
  • 具有自定义 HTTP 路径的 Cloud Functions for Firebase

    有没有办法定义 HTTP 路径 在第一个 之后 来访问 Firebase 的云功能 我想要实现的是创建一个类似休息的路径系统来访问这些功能 我有一个GitHub https github com bateramos spotter serv
  • UIActivityIndi​​catorView 在加载完成后才显示

    我在当前导航到视图控制器上有一个按钮 连接到 IBAction 在 IBAction 中 我像往常一样使用 self view addSubView 创建一个 UIActivityIndi catorView 然后加载一些图片 我已经在指示
  • 如何在WPF中的Web浏览器控件中显示unicode字符

    我想在WPF的Web浏览器控件中显示不同语言的unicode字符 但它显示特殊字符 我必须在网络浏览器控件中设置任何设置吗 您没有告诉我们您如何将内容加载到WebBrowser 如果您导航到 URL 请确保服务器发送正确的charset编码
  • 如何获取组合框中的项目数?

    如何获取组合框中列出的项目数 Try var count comboBox Items Count
  • ASP.NET MVC 应用程序不会更新某些控制器

    我使用 Visual Studio 2012 中的 Web 应用程序发布 Web 选项发布到 IIS 当我发布时 控制台告诉我构建和发布成功 并且在大多数情况下 一切都正确发布 但有一个控制器最近没有发布 没有错误 但就是无法发布 我尝试删
  • 在 Android 中以编程方式更改 AppBarLayout 高度

    我正在尝试使用图像模式实现灵活空间本教程 http blog grafixartist com toolbar animation with android design support library 一切正常 请注意 AppBarLay
  • .NET 7 和 UseEndPoints()

    我正在尝试将 NET Core 3 1 项目转换为 NET 7 当我在我的Program cs class app UseEndpoints endpoints gt endpoints MapRazorPages endpoints Ma
  • Internet Explorer 中的 HTML5 元素:运行时插入

    我在 Internet Explorer 7 及更高版本中使用 HTML5 元素时遇到问题 未测试 IE6 我知道默认情况下 如果不使用 Javascript shiv IE 会拒绝识别常见的 HTML5 元素 例如 文章 或 标题 我使用
  • 如何在 Node.js 中追加到换行符

    我正在尝试使用 Node js 将数据附加到日志文件 并且工作正常 但它不会进入下一行 n似乎不适用于我下面的功能 有什么建议么 function processInput text fs open H log txt a 666 func
  • rethinkdb 带有过滤器和 getNearest 命令

    如何对其他命令 例如过滤器命令 的结果执行 getNearest 查询 var point r point 122 422876 37 777128 r db test table users filter tags tag getNear
  • 如何强制 Grails 仅使用一种语言?

    我想让我的 Grails 应用程序仅支持一种语言 我可以在某处定义该语言 完全忽略客户端的标头或 lang 参数 我有什么办法可以这样做吗 谢谢 定义一个LocaleResolver豆子在你的config spring resources
  • 我可以将 MVC 2 DataAnnotation 属性添加到现有属性吗?

    我使用生成的类作为模型 并且希望将 DataAnnotation 属性添加到其某些属性 由于它是生成的代码 我不想直接添加注释 还有其他方法可以将它们附加到财产上吗 我考虑过使模型成为一个接口 并使用分部类来获取生成的类来订阅它 假设可行的
  • iOS 5 SDK 以不同方式对待 UIView

    我的应用程序曾经在 xCode 4 0 2 中完美编译 但现在不再使用新 SDK 在 xCode 4 2 中正确编译 我的模态视图的工作方式非常不同 某些状态未被检测到 或者其他解雇不起作用 例如 它可以用来消除 2 个堆叠的模态视图 if
  • React Native:用选项卡动画缩小标题

    Goal 我试图创建一个带有动画收缩标题的视图 其中包含带有滚动内容的选项卡的选项卡视图 参见图片 Setup 我正在使用带有 TabNavigator 的反应导航 header 是一个具有固定高度的组件 当前位于 TabNavigator
  • 使用 googletest 测试受保护成员

    谷歌测试时我对继承感到困惑 我有一个class A具有protected属性 如果我想访问那些我必须扩展该类 但同时我也需要扩展public testing Test唯一的目的是gtest 这个问题最优雅的解决方案是什么 我也在努力避免 d
  • 错误:1210:执行准备好的语句的参数数量不正确

    我正在尝试使用 Python 将数据插入 MySQL 出现这个错误的原因是什么 编程错误 1210 执行的参数数量不正确 准备好的声明 我的Python代码 connection mysql connector connect host l
  • UISearchController 搜索栏在第一次单击时消失

    我在 TableView 中实现了 UISearchController 由导航控制器推动 首先我的问题是 每当我单击搜索栏时 它就会消失 当我输入一些文本时它起作用 但它保持完全空白 然后我设法使用以下代码半解决了该问题 void sea
  • 对 ASP.NET Core 中缺少必需属性的响应

    给定以下控制器 using System ComponentModel DataAnnotations using Microsoft AspNetCore Mvc namespace WebApplication1 Controllers
  • Scala 中未绑定的可比较排序

    我对 Scala 中的排序有点熟悉Ordering的 但是我想对 Java 中定义的一些对象进行排序 他们是Comparable not Comparable T and final final class Term implements