【问题标题】:Iterate through a list of case class and just output a single case class遍历案例类列表并仅输出单个案例类
【发布时间】:2020-08-03 12:34:42
【问题描述】:

如何遍历案例类列表并仅输出单个案例类,选择唯一符合条件的行。

例如,对于一个案例类abc的列表,我想捕获满足某些条件的行。

case class abc(id: int, mod: Int, a: Int, b: Int)
case class output(id: int, mod: Int, calc: Int)

val a = List( abc(1, 101, 56, 47),
              abc(1, 201, 34, 23))

val out1: Option[Output] = Some(output(1, 101, 103))

val b = List( abc(1, 101, 56, 47)
              abc(1, 202, 47, 56))

val out2: Option[Output] = Some(output(1, 202, 103))

【问题讨论】:

  • 你试过什么? - 另外,你想如何模拟“没有返回”?与null(这被认为是一种不好的做法),带有Option? - PS:让我推荐你看看scaladoc,如果你检查了所有stdlib为你做的事情,我很确定你可以想出一个简单的解决方案;例如,我可以想到一个解决方案,只涉及对列表的一个方法调用,然后是一个简单的if
  • 返回Option[Output]也是可以的
  • 所以你想计算最大值然后.find(yourformula == max)
  • 或者,如果你只想有一个段落,foldLeft 保存当前最大值并在你找到更好的地方替换它。
  • 如何用一个简单的 if 比较不同的行

标签: scala scala-collections


【解决方案1】:

一般来说,你可以做你想做的事情:

list.foldLeft(None: Option[output]) {
  case (Some(oldMax), a) =>
    val newMax = ... // calculate output
    Some(if (check if new output is bigger) newMax else oldMax)
  case (None, a)
    Some(calculate first max)
}

为了不完全破坏乐趣,我不会实现输出的比较和计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多