내장 된 항목을 찾을 수 없지만 ExpandoMetaClass를 사용하면 다음과 같이 할 수 있습니다.
ArrayList.metaClass.collectMap = {Closure callback->
def map = [:]
delegate.each {
def r = callback.call(it)
map[r[0]] = r[1]
}
return map
}
이것은 모든 ArrayLists에 collectMap 메소드를 추가합니다 ... List 또는 Collection에 추가하는 것이 작동하지 않는 이유를 잘 모르겠습니다. 다른 질문에 대한 것 같습니다 ...하지만 이제 할 수 있습니다 ...
assert ["foo":"oof", "42":"24", "bar":"rab"] ==
["foo", "42", "bar"].collectMap { return [it, it.reverse()] }
목록에서 계산 된지도까지 하나의 클로저로 ... 정확히 내가 찾던 것입니다.
편집 : 목록 및 컬렉션 인터페이스에 메서드를 추가 할 수없는 이유는 이렇게하지 않았기 때문입니다.
List.metaClass.enableGlobally()
메서드 호출 후 인터페이스에 메서드를 추가 할 수 있습니다.이 경우에는 내 collectMap 메서드가 다음과 같은 범위에서 작동 함을 의미합니다.
(0..2).collectMap{[it, it*2]}
지도를 생성합니다. [0 : 0, 1 : 2, 2 : 4]