我正在尝试将另一个字符串添加到Iterable [String]以便于连接,但结果并不是我所期望的.
scala> val s: Iterable[String] = "one string" :: "two string" :: Nil
s: Iterable[String] = List(one string, two string)
scala> s.mkString(";\n")
res3: String =
one string;
two string
scala> (s ++ "three").mkString(";\n")
res5: String =
one string;
two string;
t;
h;
r;
e;
e
Run Code Online (Sandbox Code Playgroud)
我应该如何重写此片段以在我的iterable中包含3个字符串?
编辑:我应该补充一下,应该保留项目的顺序
++用于集合聚合.没有方法+,:+或者add在Iterable,但你可以使用这样的方法++:
scala> (s ++ Seq("three")).mkString(";\n")
res3: String =
one string;
two string;
three
Run Code Online (Sandbox Code Playgroud)
该++函数正在等待一个Traversable参数。如果您只使用"three",它会将字符串转换"three"为字符列表并将每个字符附加到s. 这就是为什么你会得到这个结果。
相反,您可以将“三个”包装在一个中Iterable,并且串联应该可以正常工作:
scala> (s ++ Iterable[String]("three")).mkString(";\n")
res6: String =
one string;
two string;
three
Run Code Online (Sandbox Code Playgroud)