Давайте go рассмотрим ваш код более подробно:
sacla> val data= List(List(1,2), List(3,4,91,9,10),11,211,456,345)
data: List[Any] = List(List(1, 2), List(3, 4, 91, 9, 10), 11, 211, 456, 345)
Тип данных - List[Any]
, поскольку список не является одним указанным c типом. Компилятор пытается определить тип, но поскольку Int
и List[Int]
несовместимы, он разрешается до Any
.
scala> data.collect{case i:Int => List(i); case l @ a :: b => l}
res0 List[List[Any]] = List(List(1, 2), List(3, 4, 91, 9, 10), List(11), List(211), List(456), List(345))
Во второй части попытка объединить записи, чтобы они были Список списков. Он соответствует Int
и оборачивает его в List
.
Однако вы видите, что тип здесь все еще List[List[Any]]
.
Теперь последняя часть, .flatten
scala> res0.flatten
res1: List[Any] = List(1, 2, 3, 4, 91, 9, 10, 11, 211, 456, 345)
Это займет у вас от List[List[Any]
до List[Any]
.
Теперь ключевым моментом здесь является то, что если вы попытаетесь вызвать .max
или .min
в этом списке, это не сработает. Так как Ordering
для Any
.
<console>:13: error: No implicit Ordering defined for Any.
не существует, исправление будет заключаться в принудительном вызове этого типа в исходном вызове collect
.
scala> data.collect{case i:Int => List(i); case l : List[Int] => l}
res6: List[List[Int]] = List(List(1, 2), List(3, 4, 91, 9, 10), List(11), List(211), List(456), List(345))
scala> .flatten
res7: List[Int] = List(1, 2, 3, 4, 91, 9, 10, 11, 211, 456, 345)
scala> .max
res8: Int = 456
scala> res7.min
res9: Int = 1