如何在 Scala 中查找集合中的连续元素

How to find consecutive elements in a collection in Scala

我正在尝试找到一种方法,根据位于第一个位置的所需元素,在 Scala 的集合中查找连续元素。 我想通过函数式编程来实现这一点,所以我正在努力想出一种方法。

基本上,我有一个列表 foo,它可以包含 ABC。 'A' 是所需的值,因此 'A' 必须是第一个,否则,结果 bar 应该为空。

first 元素,我需要提取连续的元素,直到元素值发生变化,然后创建一个新列表 bar 其中包含不同元素之前的元素序列。

例如,我想做的是

List('A', 'A', 'B', 'C', 'A', 'B') => List('A', 'A')

同时,如果第一个元素不是A,那么得到的List应该是空的

List('B', 'A', 'A', 'C') => List()

我尝试在列表 foo 上应用 foreach 并检查当前元素是否是将其添加到列表中所需的元素,但由于 Scala 的不可变性(我知道你可以使用可变但我宁愿不使用)我不知道如何跟踪以前的元素并输出集合

如果第一个元素必须始终是 A,那么 takeWhile 就是您想要的。

scala> List('A', 'A', 'B', 'C', 'A', 'B').takeWhile(_ == 'A')
val res3: List[Char] = List(A, A)

您可以使用 takeWhile:

list.headOption()
    .map(el => list.takeWhile(_ == el))
    .getOrElse(List())

如果您只想要 'A',那么您可以将代码减少到只有中间一行,如 Brian 的回答。