如何缩短代码?

时间:2018-06-13 15:44:32

标签: scala

是否可以使用if(map.nonEmpty)代码字符串,将所有内容都放在一个字符串中?

def findEqSorted(arr:List[Elem]) = {
  val map = arr.groupBy(_.suit).filter(_._2.size >= 5)
  if(map.nonEmpty)
    Some(map.head._2.sortWith(_.num > _.num).take(5))
  else None
}

如果我这样做:

Option(arr.groupBy(_.suit).filter(_._2.size >= 5).head._2.sortWith(_.num > _.num).take(5))

如果filter(_._2.size >= 5)返回nonEmpty Map,则一切正常,否则我会收到错误

Exception in thread "main" java.util.NoSuchElementException: next on empty iterator

1 个答案:

答案 0 :(得分:3)

您正在执行filter然后选择执行head,您可以使用find来缩小此选项,它会为您返回一个选项:

def findEqSorted(arr: List[Elem]) = {
  arr.groupBy(_.suit).find(_._2.size >= 5).map {
    _._2.sortWith(_.num > _.num).take(5)
  }
}