首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带索引的.collect

带索引的.collect
EN

Stack Overflow用户
提问于 2012-02-24 21:42:39
回答 6查看 22.1K关注 0票数 48

有没有带索引的.collect?我想做这样的事情:

代码语言:javascript
复制
def myList = [
    [position: 0, name: 'Bob'],
    [position: 0, name: 'John'],
    [position: 0, name: 'Alex'],
]

myList.collect { index ->
    it.position = index
}

(即我想将position设置为一个值,该值将指示列表中的顺序)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-08-05 19:49:29

从Groovy2.4.0开始,在java.lang.Iterable中添加了一个withIndex()方法。

因此,以函数式方式(无副作用,不可变),它看起来像

代码语言:javascript
复制
def myList = [
  [position: 0, name: 'Bob'],
  [position: 0, name: 'John'],
  [position: 0, name: 'Alex'],
]

def result = myList.withIndex().collect { element, index ->
  [position: index, name: element["name"]] 
}
票数 107
EN

Stack Overflow用户

发布于 2012-10-25 04:15:16

稍微时髦一点的collectWithIndex版本:

代码语言:javascript
复制
List.metaClass.collectWithIndex = {body->
    def i=0
    delegate.collect { body(it, i++) }
}

甚至是

代码语言:javascript
复制
List.metaClass.collectWithIndex = {body->
    [delegate, 0..<delegate.size()].transpose().collect(body)
}
票数 13
EN

Stack Overflow用户

发布于 2012-02-24 21:45:08

eachWithIndex可能会工作得更好:

代码语言:javascript
复制
myList.eachWithIndex { it, index ->
    it.position = index
}

使用collectX似乎没有必要,因为您只是修改了集合,而不是将其中的特定部分返回到新集合中。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9431723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档