設置我有類Set[String]
類型的字段。另外,我有這個類的對象列表。我想將所有這些對象集合中的所有字符串收集到一個集合中。這是我如何能做到這一點已經:斯卡拉:使用列表中flatMap
case class MyClass(field: Set[String])
val list = List(
MyClass(Set("123")),
MyClass(Set("456", "798")),
MyClass(Set("123", "798"))
)
list.flatMap(_.field).toSet // Set(123, 456, 798)
它的工作原理,但我想,我可以只使用flatMap
達到同樣的,沒有toSet
調用。我想這一點,但它給了編譯錯誤:
// error: Cannot construct a collection of type Set[String]
// with elements of type String based on a collection of type List[MyClass].
list.flatMap[String, Set[String]](_.field)
如果我改變的list
到Set
類型(即val list = Set(...)
),那麼這樣的flatMap
調用工作。
所以,我可以用某種方式Set.canBuildFrom
或任何其他CanBuildFrom
對象調用flatMap
上List
對象,這樣我會得到Set
結果?
因爲'foldLeft'接受函數,所以在這裏不需要使用'case'兩個參數,即'(_ ++ _.field)' –
你當然是正確的@Oneg,但爲了清晰起見,我明確表示。 – mdm
您仍然可以省略「case」關鍵字,因爲您沒有進行任何重要的模式匹配 –