Giống như dstarh nói, trừ khi bạn đang tìm kiếm một phương pháp không phá hủy mà trả về một bản đồ mới với các chỉ số của bạn cư, Rob Hruska 's câu trả lời là những gì bạn 'Đang tìm kiếm.
dstarh câu trả lời của bạn cung cấp cho bạn phiên bản không phá hủy collectWithIndex
, nhưng cũng xử lý tập hợp kết quả thực tế.
Tôi thường tìm cách tốt nhất để giao những vật nặng như vậy cho đối tượng tiếp nhận để có thể chơi tốt với việc thực hiện đa hình collect
, tức là trong trường hợp một lớp cụ thể thực hiện collect
khác nhau (chỉ cần đặt kết quả trong một mảng) collectWithIndex
ủy quyền cho nó sẽ đảm bảo hành vi thống nhất. Dưới đây là cách mã sẽ trông:
@Category(List)
class Enumerator {
def enumerateCollecting(Closure closure) {
def index = 0
this.collect { closure.call(it, index++) }
}
}
use(Enumerator) {
['foo', 'bar', 'boo', 'baz'].collectWithIndex { e, i ->
[index: i, element: e]
}
}
Tham khảo this gist cho một ví dụ cho cả eachWithIndex
và collectWithIndex
.
Ngoài ra, như các ý kiến để nhà nước câu hỏi của bạn, có hai vấn đề Jira mở cho tính năng chúng tôi đã described- GROOVY-2383 & GROOVY-3797
có vẻ như đó là một tính năng được yêu cầu http: //jira.codehaus.org/browse/GROOVY-2838 – dstarh
trả lời với một giải pháp thực tế dưới đây – dstarh
Điều gì không có tình yêu cho thu thập của tôi với chỉ mục :) – dstarh