我如何遍历案例类列表,仅输出单个案例类,只选择一个符合条件的行。
例如,对于案例类abc的列表,我想捕获该行,例如该行的abc.a + abc.b大于任何其他行的任何其他abc.a + abc.b并且也大于100.如果以上条件相同,则捕获mod为200s的行。如果所有行的a + b都小于100,则我什么也不输出。
保证mod 100s中的a和b会有所不同。同样,mod 200s中的a和b会有所不同
case class abc(id: int, mod: Int, a: Int, b: Int)
case class output(id: int, mod: Int, calc: Int). // calc = a + b
val a = List( abc(1, 101, 56, 47),
abc(1, 201, 34, 23),
abc(1, 102, 12, 33),
abc(1, 103, 21, 34),
abc(1, 202, 23, 34),
abc(1, 203, 23, 35))
val out1: Option[Output] = Some(output(1, 101, 103))
val b = List( abc(1, 101, 56, 47),
abc(1, 201, 34, 23),
abc(1, 102, 12, 33),
abc(1, 103, 21, 34),
abc(1, 202, 47, 56),
abc(1, 203, 23, 35))
val out2: Option[Output] = Some(output(1, 202, 103))
通常,您可以通过以下方法完成您想做的事情:
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)
}
我不会实现输出的比较和计算不会完全破坏乐趣。