Scala 类 和列表
Scala classes and List
所以我的简短代码片段如下所示:
Source.fromFile(fileName).getLines().foldLeft(List[CsvEntry]())((csvList, currentLine) =>
currentLine match {
case pattern(organisation,yearAndQuartal,medKF,trueOrFalse,name,money) => new CsvEntry(organisation,yearAndQuartal,medKF.toInt,trueOrFalse.toInt,name,money) :: csvList
case default => csvList
"fileName" 只是文件的名称,但对我的问题无关紧要。
我的 csvList 是这样定义的:
type csvList = List[CsvEntry]
val list: csvList = List()
我的 class 看起来像这样:
class CsvEntry(val organisation: String, val yearAndQuartal : String, val medKF:Int, val trueOrFalse: Int, val name: String, val money:String){
override def toString = s"$organisation, $yearAndQuartal, $medKF,$trueOrFalse, $name, $money"
所以我的问题是,每当我加载一个文件并将其写入我的 csvList 时,它就可以工作,但是当我加载另一个第二个文件时,旧内容会被覆盖。
我该如何更改它才能不被过度使用,所以它应该只将它添加到前面的数据中?
呼叫开始 Source.fromFile...
returns 一个列表,然后您应该将其与下一个呼叫合并。
例如:
List("filename1", "filename2").map(processFile).flatten
其中 processFile 是:
def processFile(fileName: String) = {
Source.fromFile(fileName).getLines().foldLeft... all the code in question
}
这里没有任何东西可以得到 "overwritten",因为没有可变状态。 type csvList
和 foldLeft
调用中的 csvList
是两个截然不同的东西:前者是类型,后者是参数。
每次执行您的代码段时,它都会 returns 特定文件的 CSV 对象列表。作为不可变列表。
你想要的是:
- 根据您的代码段创建函数:
def readFile(name: String): List[CsvFile]
- 在两个文件上调用它并将结果保存到
val
s
- 连接两个列表:
list1 ++ list2
所以我的简短代码片段如下所示:
Source.fromFile(fileName).getLines().foldLeft(List[CsvEntry]())((csvList, currentLine) =>
currentLine match {
case pattern(organisation,yearAndQuartal,medKF,trueOrFalse,name,money) => new CsvEntry(organisation,yearAndQuartal,medKF.toInt,trueOrFalse.toInt,name,money) :: csvList
case default => csvList
"fileName" 只是文件的名称,但对我的问题无关紧要。 我的 csvList 是这样定义的:
type csvList = List[CsvEntry]
val list: csvList = List()
我的 class 看起来像这样:
class CsvEntry(val organisation: String, val yearAndQuartal : String, val medKF:Int, val trueOrFalse: Int, val name: String, val money:String){
override def toString = s"$organisation, $yearAndQuartal, $medKF,$trueOrFalse, $name, $money"
所以我的问题是,每当我加载一个文件并将其写入我的 csvList 时,它就可以工作,但是当我加载另一个第二个文件时,旧内容会被覆盖。 我该如何更改它才能不被过度使用,所以它应该只将它添加到前面的数据中?
呼叫开始 Source.fromFile...
returns 一个列表,然后您应该将其与下一个呼叫合并。
例如:
List("filename1", "filename2").map(processFile).flatten
其中 processFile 是:
def processFile(fileName: String) = {
Source.fromFile(fileName).getLines().foldLeft... all the code in question
}
这里没有任何东西可以得到 "overwritten",因为没有可变状态。 type csvList
和 foldLeft
调用中的 csvList
是两个截然不同的东西:前者是类型,后者是参数。
每次执行您的代码段时,它都会 returns 特定文件的 CSV 对象列表。作为不可变列表。
你想要的是:
- 根据您的代码段创建函数:
def readFile(name: String): List[CsvFile]
- 在两个文件上调用它并将结果保存到
val
s - 连接两个列表:
list1 ++ list2