简体   繁体   中英

Scala classes and List

So my short code snippet looks like the following:

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

The "fileName" is only the Name of the file, but it doesn't matter for my question. And my csvList is defined like this:

type csvList = List[CsvEntry]
val list: csvList = List()

my class look like this:

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"

So my question is, whenever I am loading a file and writing it to my csvList it works, but when I am loading another 2nd file the old content gets overwirtten. How can I change it in order to not get overwirtten, so it should only add it to the preceding data ?

The call beginning Source.fromFile... returns a list that you should then combine with the next call.

For example:

List("filename1", "filename2").map(processFile).flatten

where processFile is:

def processFile(fileName: String) = {
  Source.fromFile(fileName).getLines().foldLeft... all the code in question
}

Nothing here can possibly get "overwritten", since there's no mutable state. Your type csvList and csvList in your foldLeft call are two very different things: the former is the type, the latter is the parameter.

Each time your snippet is executed, it returns a list of your CSV objects of a particular file. As an immutable list.

What you want is:

  • Make a function out of your snippet: def readFile(name: String): List[CsvFile]
  • Call it on the two files and save results to val s
  • Concat the two lists: list1 ++ list2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM