首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >compareTo型误差

compareTo型误差
EN

Stack Overflow用户
提问于 2018-01-29 06:07:15
回答 1查看 91关注 0票数 1

我尝试创建一个泛型函数diff,它计算目标向量(Array[T])上的间隙

例如:

差分(阵列(1,3,5)) ->阵列(2,2)

->阵列(日期(2018-01-01),日期(2018-01-03),日期(2018-01-06)

代码语言:javascript
复制
import java.sql.Date
import java.text.SimpleDateFormat

object Test extends App {

  val toDate: String => Date =
    (x: String) => new SimpleDateFormat("yyyy-MM-dd").parse(x).asInstanceOf[Date]

  val data: Array[Date] = 
    Array("2018-01-01", "2018-01-02", "2018-01-05", "2018-01-10").map(toDate(_))

  def diff[E <: Comparable[_]](xs: Array[E]): Array[Int] =
    if(xs.length < 2) Array(0)
    else xs.tail.zipWithIndex.map { tu =>
      val x2: E = tu._1
      val idx: Int = tu._2
      val x1: E = xs.init(idx)
      x2 compareTo x1
    }

  (data).foreach(println(_))
  diff(data).foreach(println(_))
}

会发生这样的错误,

错误:(19,20)类型错配; 找到:x1.类型(底层类型E) 需要:_$1 x2 compareTo x1

因为x2 & x1是类型E,所以它是Compareable[_]

我不知道怎么修正我的代码

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-29 07:46:34

解决问题的一种方法是使用视图绑定:

代码语言:javascript
复制
object Test extends App {

    val toDate: String => java.sql.Date =
(x: String) => new Date(new SimpleDateFormat("yyyy-MM-dd").parse(x).getTime)

    val data: Array[Date] =
Array("2018-01-01", "2018-01-02", "2018-01-05", "2018-01-10").map(toDate(_))

    def diff[E <% Comparable[_ >: E]](xs: Array[E]): Array[Int] =
    if (xs.length < 2) Array(0)
    else xs.tail.zipWithIndex.map { tu =>
       val x2: E = tu._1
       val idx: Int = tu._2
       val x1: E = xs(idx)
       x2 compareTo x1
    }


   data.foreach(println(_))
   diff(data).foreach(println(_))
}

这是我从我如何写出T扩展可比的等价物?中学到的。

顺便说一下,compareTo没有返回两个元素之间的区别。它只返回- 1,0和1。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48495275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档