Scala的空集:...不符合预期类型Set [Nothing]

时间:2016-11-27 13:27:16

标签: scala set

我是Scala&Set的新手。我试图连接Set与空Set。代码如下:

def getAllSlots(preferences: Map[Band, List[Slot]]): Set[Slot] = {
  preferences.foldLeft(Set.empty){(r,c) => c match {
    case (_, li) => li.toSet ++ r
    case _ => r
  }}
}

当我尝试li.toSet ++ r时发生错误,抱怨... doesn't conform to expected type Set[Nothing]。然后,我不知道如何从空的那个开始建立一个Set。

谢谢大家。

2 个答案:

答案 0 :(得分:4)

您必须帮助编译器推断出正确的类型,它没有足够的信息来确定您的意思Set[Slot]empty采用类型参数:

def getAllSlots(preferences: Map[Band, List[Slot]]): Set[Slot] = {
  preferences.foldLeft(Set.empty[Slot]){(r,c) => c match {
    case (_, li) => li.toSet ++ r
    case _ => r
  }}
}

答案 1 :(得分:2)

更简单,更整洁的解决方案

preferences.valuesIterator.flatten.toSet

使用valuesIterator然后flatten获取偏好设置地图的所有值,然后使用toSet功能转换为设置。

getAllSlots功能变为

def getAllSlots(preferences: Map[Band, List[Slot]]): Set[Slot] = 
  preferences.valuesIterator.flatten.toSet