我可以用排序来订购Instant吗?
我目前使用的顺序如下:
MyRuleEngine(Equals).eval(Instant.now(), Instant.now().plusSeconds(1))(Ordering.by(_.toEpochMilli)) shouldBe false但它可能会抛出异常(@throws ArithmeticException if numeric overflow occurs) --还有其他建议吗?我想根据瞬间的时间线位置进行排序。
Im使用以下函数:
def eval[T](checkedValue: T, checkedWithValue: T)(ord: Ordering[T]) : Boolean 我正在寻找一个如下的解决方案:
MyRuleEngine(GreaterThan).eval("B", "A")(scala.math.Ordering.String) shouldBe true
MyRuleEngine(GreaterThan).eval(10, 0)(scala.math.Ordering.Int) shouldBe true
MyRuleEngine(Equals).eval(true, true)(scala.math.Ordering.Boolean) shouldBe true使用2.12.8
发布于 2021-01-27 15:37:15
与Ordering[String]或Ordering[Int]不同的是,Scala没有显式的val或object和Ordering[Instant]。Scala编译器根据Instant在Java语言中扩展了Comparable这一事实,在您隐式请求它时按需生成一个。
如果你想使用Scala提供的Ordering[Instant],你必须调用隐式的并让编译器为你生成它:
MyRuleEngine(rule).eval(instant1, instant2)(Ordering[Instant])或
MyRuleEngine(rule).eval(instant1, instant2)(implicitly)您还可以使用与编译器相同的方式手动创建Ordering[Instant]:
MyRuleEngine(rule).eval(instant1, instant2)(Ordering.ordered(identity))发布于 2021-01-27 06:12:36
您可以通过以下方式调用标准的隐式Ordering[Instant]:
implicit val instantOrdering: Ordering[Instant] = Ordering[Instant]这将调用Ordering上的apply方法,该方法根据Instant扩展java.lang.Comparable[Instant]的事实调用从LowPriorityOrderingImplicits特征( Ordering伴生对象扩展的特征)中派生的实例。
您可以通过以下方式直接派生Instant的Ordering实例:
val instantOrdering = Ordering.ordered[Instant]Ordering.ordered适用于扩展Comparable[T]的任何类型的T。
您还可以使用以下命令定义功能等效的实例
val instantOrdering: Ordering[Instant] = Ordering.fromLessThan[Instant] { (x, y) => x.isBefore(y) }https://stackoverflow.com/questions/65909648
复制相似问题