수색…


비고

대부분의 경우 스프레드 연산자 *. .collect { it.________ } . .collect { it.________ } 를 호출하는 것과 동일합니다.

def animals = ['cat', 'dog', 'fish']
assert animals*.length() == animals.collect { it.length() }

그러나 주체가 null 인 경우 다르게 동작합니다.

def animals = null
assert animals*.length() == null
assert animals.collect { it.length() } == []

메소드 호출하기

assert ['cat', 'dog', 'fish']*.length() == [3, 3, 4]

메소드가 일부 요소에없는 경우 컬렉션에서 유형을 혼합 할 때 groovy.lang.MissingMethodException 이 발생 될 수 있습니다.

['cat', 'dog', 'fish',3]*.length() 
// it throws groovy.lang.MissingMethodException: No signature of method: java.lang.Integer.length()

부동산 접근하기

class Vector {
    double x
    double y
}
def points = [
    new Vector(x: 10, y: -5),
    new Vector(x: -17.5, y: 3),
    new Vector(x: -3.3, y: -1)
]

assert points*.x == [10, -17.5, -3.3]

참고 : * 는 선택 사항입니다. 우리는 위의 문장을 아래의 라인과 같이 작성할 수도 있고 Groovy 컴파일러는 여전히 그것에 만족할 것입니다.

assert points.x == [10, -17.5, -3.3]

그것의 null-safe

컬렉션에 null 객체가 있으면 NPE throw하지 않고 대신 null 반환합니다.

assert ['cat', 'dog', 'fish', null]*.length() == [3, 3, 4, null]

null 객체에서 직접 사용하면 null 도 허용됩니다.

def nullCollection = null
assert nullCollection*.length() == null


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow