Представьте, что у меня есть несортированный список положительных и отрицательных ints. Я хочу вернуть список, содержащий все положительные int и первое отрицательное число, но затем игнорировать все последующие отрицательные числа из списка, сохраняя порядок.
Императивно я мог бы сделать:
l = [1, 2, -4, 5, -6, -1, 3]
out = []
first = true
for n in l:
if n >= 0:
out.push(n)
else if first:
out.push(n)
first = false
// out = [1, 2, -4, 5, 3]
Как я могу сделать это с помощью FP в Scala? Я думал (вероятно, не компилируется...):
val l = List(1, 2, -4, 5, -6, -1, 3)
val posl = l.map(_ >= 0)
val negl = l.zipWithIndex.map((n, i) => if (n < 0) (i, n) else (None, None)).head
// now split posl at negl._1, and create a new list of leftSlice :: negl._2 :: rightSlice?
Это правильный подход, или есть более элегантный, лаконичный способ?