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")
我有一個學生案例班的清單。我想建立一個學生的地圖,老師的名字(地圖的鍵)永遠是唯一的。最好map可以過濾掉某個名字。
uj5u.com熱心網友回復:
您正在使用 foreach,它回傳 Unit 作為結果。我會建議以下這兩個中的任何一個。第一個是 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)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474422.html
標籤:斯卡拉
上一篇:使用Mutablelivedata從DialogFragmentColorPicker更改片段的背景顏色不起作用
下一篇:嵌套函式中的型別不匹配
