Присоединяйся к Elem со следующим в функциональном стиле - PullRequest
2 голосов
/ 18 апреля 2019

Я пытаюсь найти способ «объединить» / «группировать» 2 элемента в списке следующим образом:

List("a","b","c","d")  -> List("ab","bc","cd")

С функциональным стилем.

Кто-нибудь знает, как это сделать?

Нужно ли использовать редуктор, сгиб, сканирование, другие функции более высокого порядка?

Ответы [ 3 ]

7 голосов
/ 18 апреля 2019

Sliding создает подколлекции со скользящим окном, тогда вам просто нужно сопоставить эти подсписки со строками:

List("a","b","c","d").sliding(2,1).map{case List(a,b) => a+b}
6 голосов
/ 18 апреля 2019

Попробуйте

val xs = List("a","b","c","d")
(xs, xs.tail).zipped.map(_ ++ _) // List(ab, bc, cd)
4 голосов
/ 18 апреля 2019

Вы можете использовать sliding для создания окна:

val l = List("a","b","c","d")
val res = l.sliding(2).map(_.reduce(_ + _))
res.foreach(println)

это приводит к

ab
bc
cd
...