从案例 class 列表中的元素创建地图

Create Map from Elements from List of case class

      case class Student(id:String, name:String, teacher:String )
      val myList = List( Student("1","Ramesh","Isabela"), Student("2","Elena","Mark"),Student("3","invalidKey","Someteacher"))
      
      val a = myList.foreach( i=> (i.name ->  i.teacher)).toMap.filter(i.name != "invalidKey")

我有一份学生案例 class 的列表。我想建立一张学生地图,老师的名字(地图的键)将永远是唯一的。最好map能过滤掉某个名字

您正在使用 foreach,结果是 returns 单位。 我会在下面建议这两个中的任何一个。第一个是 Luis Miguel 提到的:

val myMap = myList.collect {
  case student if student.name != "invalidKey" => student.name -> student.teacher
}.toMap

或者:

val myMap2 = myList.foldLeft[Map[String, String]](Map.empty) {
  case (elementsMap, newElement) if newElement.name != "invalidKey" => 
    elementsMap + (newElement.name -> newElement.teacher)
  case (elementsMap, _) => elementsMap
}

差异:

第一种方法更易于阅读且更短(虽然更短并不是优势 :D)。第二个迭代次数较少(第一个迭代次数要转换为 Map)。