tôi không thể tìm thấy bất cứ điều gì được xây dựng trong ... nhưng sử dụng ExpandoMetaClass tôi có thể làm điều này:
ArrayList.metaClass.collectMap = {Closure callback->
def map = [:]
delegate.each {
def r = callback.call(it)
map[r[0]] = r[1]
}
return map
}
này cho biết thêm phương pháp collectMap cho tất cả ArrayLists ... Tôi không chắc chắn lý do tại sao nó thêm vào danh sách hoặc Bộ sưu tập đã không làm việc .. tôi đoán đó là cho một câu hỏi khác ... nhưng bây giờ tôi có thể làm điều này ...
assert ["foo":"oof", "42":"24", "bar":"rab"] ==
["foo", "42", "bar"].collectMap { return [it, it.reverse()] }
từ Danh sách lại bản đồ tính với một kết thúc ... chính xác những gì tôi đã tìm kiếm.
Chỉnh sửa: lý do tôi không thể thêm phương pháp này vào danh sách các giao diện và Bộ sưu tập là vì tôi đã không làm điều này:
List.metaClass.enableGlobally()
sau đó gọi phương thức, bạn có thể thêm các phương pháp để giao diện .. mà trong trường hợp này có nghĩa là phương pháp collectMap tôi sẽ làm việc trên dãy như thế này:
(0..2).collectMap{[it, it*2]}
trong đó sản lượng bản đồ: [0: 0, 1: 2, 2: 4]
bình luận Amir bây giờ là câu trả lời đúng: http://stackoverflow.com/a/4484958/27561 –