在执行groupBy之后,在列表列表上进行分区/滑动后,得到以下Map。现在我只对地图的值感兴趣,键无关紧要。基本上,我试图在groupBy和slide / partition之后提取List的子集,并执行其他映射并减少它们的功能。
var sectionMap : Map[Int,List[List[Any]]] = Map(
1 -> List(List(1,20,"A"), List(1,40,"B")),
2 -> List(List(2,30,"A"), List(2,80,"F")),
3 -> List(List(3,80,"B"))
)
我使用了sectionMap.values
,但是它返回了类似Iterable[List[List[Any]]]
的格式,但是我想要以下类型的List[List[Any]]
。是否有一步功能可以应用来达到目的?
List(
List(1,20,"A"),
List(1,40,"B"),
List(2,30,"A"),
List(2,80,"F"),
List(3,80,"B")
)
答案 0 :(得分:2)
您可以使用sectionMap.values.flatten.toList
。
flatten
将Seq[Seq[T]]
转换为Seq[T]
,而toList
将Iterable
转换为List
答案 1 :(得分:1)
您需要执行map.values,这将为您提供值列表。由于值是“列表列表”,因此您将得到Iterable(List(List(1,20,"A"))) :Iterable[List[List[Any]]]
,因此可以展平使其变为Iterable(List(1,20,"A")): Iterable[List[Any]]
。
如果您希望它是List[List[Any]]
,请在展平后执行.toList。
您可以使用:
sectionMap.values.flatten
//output List(List(1, 20, A), List(1, 40, B), List(2, 30, A), List(2, 80, F), List(3, 80, B))
答案 2 :(得分:1)
在sectionMap上使用map
或flatMap
或collect
方法如下:
sectionMap.map(_._2).flatten.toList
sectionMap.flatMap(_._2).toList
sectionMap.collect{case (x,y) => y}.flatten.toList
答案 3 :(得分:0)
您还可以使用flatMap:
sectionMap.flatMap{ case (_, x) => x }.toList
它将扁平化和提取合并到同一迭代中。