加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在案例类中使用Scala reduceLeft?

发布时间:2020-12-16 10:07:37 所属栏目:安全 来源:网络整理
导读:我理解如何在简单的整数列表上使用reduceLeft,但尝试在case类对象失败时使用if. 假设我有: case class LogMsg(time:Int,cat:String,msg:String) val cList = List(LogMsg(1,"a","bla"),LogMsg(2,LogMsg(4,"b","bla")) 我想找到LogMsgs之间最大的时间差异.
我理解如何在简单的整数列表上使用reduceLeft,但尝试在case类对象失败时使用if.

假设我有:

case class LogMsg(time:Int,cat:String,msg:String)
  val cList = List(LogMsg(1,"a","bla"),LogMsg(2,LogMsg(4,"b","bla"))

我想找到LogMsgs之间最大的时间差异.
我想做的事情如下:

cList.reduceLeft((a,b) => (b.time - a.time)

这当然不起作用.
reduceLeft的第一次迭代比较前两个元素,它们都是LogMsg类型.之后,它将下一个元素(LogMsg)与第一次迭代(Int)的结果进行比较.

我只是语法错误或者我应该采取另一种方式吗?

解决方法

我可能会这样做:

(cList,cList.tail).zipped.map((a,b) => b.time - a.time).max

您需要事先检查cList是否至少有2个元素.

reduceLeft不能用于返回最大的差异,因为它总是返回你正在减少的List的类型,即在这种情况下是LogMsg,并且你要求Int.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读