Groovy遍历Map

Sug*_*lai 2 groovy

我有一个map持有这种价值观的groovy

Map testMap = [1:[1,1,1],2:[2,2,2]]
Run Code Online (Sandbox Code Playgroud)

在这里我打电话给这样的collect功能

testMap.collect {it.value}
Run Code Online (Sandbox Code Playgroud)

output喜欢这样的

[[1, 1, 1], [2, 2, 2]]
Run Code Online (Sandbox Code Playgroud)

但我想要output那样的[1,1,1,2,2,2]

是他们groovy实现这一目标的任何without using each方法

Abs*_*Abs 7

你可以使用groovy的flatten()方法.

testMap.collect {it.value}.flatten()
Run Code Online (Sandbox Code Playgroud)

  • 甚至更短的`testMap*.value.flatten()` (6认同)

Kas*_*nek 7

甚至有更简单的解决方案

 [1:[1,1,1],2:[2,2,2]].collectMany{it.value}
Run Code Online (Sandbox Code Playgroud)


Mar*_*her 6

这里有几个解决方案使用了collect系列,如果你对数据进行了突变,这是好的,但是在这种情况下它只是抓取所有使用扩展运算符对映射值更好的值.

testMap*.value.flatten()
Run Code Online (Sandbox Code Playgroud)

或地图上的功能

testMap.values().flatten()
Run Code Online (Sandbox Code Playgroud)

注意它是value在遍布地图的每个元素时,以及values()在一次性直接询问地图时输入条目值.

这两者都更多地读取"从testMap中获取值"而不是收集通常用于地图上的突变的值.

这是一个风格问题,但如果您只是在改变数据时使用collect,那么代码将更具可读性.