val list = List("1","10","12","30","40","50")
基于此处n
中的参数"12"
,"12"
前面的元素应形成一个
列表List("30,40,50")
,最终列表应如下创建
预期产量
List("1","10","12",List("30,40,50") )
list.dropWhile(_!="12").tail gives `List("30,40,50")` but i am not above the achieve the desired output
答案 0 :(得分:2)
partition
将提供最接近您想要的输出。
scala> list.partition(_ <= "12")
res21: (List[String], List[String]) = (List(1, 10, 12),List(30, 40, 50))
List
的所有元素必须具有相同的类型。 splitAt
或partition
可以完成此操作,尽管返回类型与所需的返回类型不同。我怀疑期望的返回类型List[String, ..., List[String]]
是“类型气味”,可能表示另一个问题。
答案 1 :(得分:2)
也许span
可以帮助您
val (a, b) = list.span(_ != "12")
val h :: t = b
val res = a :+ h :+ List(t.mkString(","))
为输入List("123", "10", "12", "30", "40", "50")
生成:
List("123", "10", "12", List("30,40,50"))
答案 2 :(得分:0)
如果处理输出类型(List[java.io.Serializable]
),则这里是acc
方法,该方法采用所需的参数,在这种情况下为字符串s
:
def acc(list:List[String],s:String) = {
val i = list.indexOf(s)
list.take(i+1):+List(list.drop(i+1).mkString(","))
}
scala> val list = List("1","10","12","30","40","50")
list: List[String] = List(1, 10, 12, 30, 40, 50)
scala> acc(list,"12")
res29: List[java.io.Serializable] = List(1, 10, 12, List(30,40,50))
scala> acc(list,"10")
res30: List[java.io.Serializable] = List(1, 10, List(12,30,40,50))
scala> acc(list,"40")
res31: List[java.io.Serializable] = List(1, 10, 12, 30, 40, List(50))
scala> acc(list,"30")
res32: List[java.io.Serializable] = List(1, 10, 12, 30, List(40,50))