没有返回值的案例

时间:2018-03-29 12:59:16

标签: scala match

我有以下单元测试:

FlattenArray.flatten(
    List(0, 2, List(List(2, 3), 8, List(List(100)), null, List(List(null))), -2))
    should be(List(0, 2, 2, 3, 8, 100, -2))

我的实施如下:

object FlattenArray {
    def flatten(list: List[Any]): List[Any] = {
        list match {
            case Nil => Nil
            case (x: List[Any]) :: tail => flatten(x) ::: flatten(tail)
            case x :: tail => x :: flatten(tail)
        }
    }
}

测试是否失败,因为,如果没有,我应该不在展平列表中添加任何值:任何有关如何操作的建议?

我可以从展平列表中过滤掉空值:这是正确的实现吗?

1 个答案:

答案 0 :(得分:5)

您可以为null :: tail添加一个返回flatten(tail)的特殊情况:

def flatten(list: List[Any]): List[Any] = {
  list match {
    case Nil => Nil
    case null :: tail => flatten(tail)
    case (x: List[Any]) :: tail => flatten(x) ::: flatten(tail)
    case x :: tail => x :: flatten(tail)
  }
}