我正在阅读由a=b
格式的行组成的文件。
使用Source.fromFile("file").getLines
我得到Iterator[String]
。我想我需要将字符串拆分为元组,然后从元组中形成地图 - 这很容易。我无法从Iterator[String]
转到Iterator[(String,String)]
。
我该怎么做?我是scala的初学者,没有功能编程经验,所以我很容易接受替代方案:)
答案 0 :(得分:1)
您可以通过拆分字符串,然后使用Iterator.map
从第一个和第二个元素创建元组来实现:
val strings = List("a=b", "c=d", "e=f").iterator
val result: Iterator[(String, String)] = strings.map { s =>
val split = s.split("=")
(split(0), split(1))
}
如果你不介意额外的迭代和中间收集,你可以使它更漂亮:
val result: Iterator[(String, String)] =
strings
.map(_.split("="))
.map(arr => (arr(0), arr(1)))
答案 1 :(得分:0)
您可以使用map
方法转换迭代器返回的值:
def map[B](f: (A) ⇒ B): Iterator[B]
答案 2 :(得分:0)
也许是这样的?
Source.fromFile("file").getLines.map(_.split("=").map( x => (x.head,x.tail) ) )
您可能希望将其包装到Try
。
答案 3 :(得分:0)
这是我的尝试:
val strings = List("a=b", "c=d", "e=f")
val map = strings.map(_.split("=")).map { case Array(f1,f2) => (f1,f2) }