转自:http://johnnyjian.iteye.com/blog/438013
假设我们有两个List,分别是a和b,a和b的长度相同,现在我们想把a的每个元素作为key,b中对应的元素作为value,构造一个Map,应该怎么写呢?
最直接的想法,先建立一个空的Map,然后往里面添加key-value对,代码如下(运用了我在 http://johnnyjian.iteye.com/blog/271554中提到的同时迭代多个List的技巧):
但是,其实我们可以通过inject方法,把代码缩减为一行:
以上代码在Groovy 1.6.4下测试通过。
最直接的想法,先建立一个空的Map,然后往里面添加key-value对,代码如下(运用了我在 http://johnnyjian.iteye.com/blog/271554中提到的同时迭代多个List的技巧):
- def a = [1, 2, 3]
- def b = [4, 5, 6]
- def m = [:]
- [a, b].transpose().each { k, v -> m += [(k): v] }
- assert m == [1: 4, 2: 5, 3: 6]
但是,其实我们可以通过inject方法,把代码缩减为一行:
- def m = [a, b].transpose().inject([:]) { s, l -> s + [(l[0]): l[1]] }
- assert m == [1: 4, 2: 5, 3: 6]
以上代码在Groovy 1.6.4下测试通过。