如何仅从地图中提取值

时间:2018-08-14 05:58:05

标签: scala

在执行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")
  )

4 个答案:

答案 0 :(得分:2)

您可以使用sectionMap.values.flatten.toList

flattenSeq[Seq[T]]转换为Seq[T],而toListIterable转换为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上使用mapflatMapcollect方法如下:

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

它将扁平化和提取合并到同一迭代中。