2012-09-25 6 views
23

나는 gremlin으로 젖을 끓일 뿐이다. 나는 그렘린이 그루비를 기반으로한다는 것을 이해합니다. 나는 here 문서를 찾았지만, 아직도 구문이 무엇을 의미하는지 잘 모르겠습니다. groovy sort with comparator syntax

나는 비교기와 종류의 구문이 어떻게 작동하는지에 관해서 조금 혼란 스러워요 :

m.sort{a,b -> a.value <=> b.value} 

누군가가 {} 사이의 모든 다른 비트가 무엇을 의미하는지 설명 할 수 있을까요?

답변

40

sort이 사용하는 Closure에 두 개의 매개 변수가있는 경우이 매개 변수는 전통적인 Comparator처럼 작동합니다. 즉, 두 개의 요소 ab 사이에서 정렬 중에 수행 된 각 비교에 대해 은 첫 번째 인수가 두 번째보다 작거나 같거나 0보다 큰 음수, 0 또는 양의 정수를 반환합니다. .

특정 시나리오에서 비교는 spaceship operator<=>을 사용한 결과입니다. 다시 말해, 에 요소를 효과적으로 정렬하는 것이 오름차순입니다.

예를 들어 목록이 [ 3, 2, 1 ] 인 경우 해당 종류의 결과는 would be[ 1, 2, 3 ]입니다.

int compare(a, b) { 
    if (a < b) { 
    return -1; 
    } else if (a > b) { 
    return 1; 
    } else { 
    return 0; 
    } 
} 
+0

상기 'A, B에 대한 추가 오버 연산자 ->'간단 비교기 값과''A' b' 전달? – F21

+0

@ F21 : 예, 일종의. 이것은 두 개의 매개 변수를 취하고 우주선 연산자를 반환하는 함수 본문에 따라 정렬하는 데 사용되는 함수와 같습니다. –

+0

대단한 설명! 환호 :) – F21

4

우주선 연산자 <=>가 과부하 사업자이고 compareTo()를 나타냄

따라서 m.sort{a,b -> a.value <=> b.value}는 대략는 다음 compare 기능을 사용하는 것과 같다. 기본적으로 a<=>ba.compareTo(b)과 같습니다.

예문은 sort() 함수를 (Java8에서는 람다와 같이) 클로저와 함께 사용하고 있습니다. 그것의 구문은 다음

.method {closureParameters ->statements}

그래서 예하는 closure으로 sort() 기능을 사용하면 우주선 (비교)을 사용하는 폐쇄 내부 운영자

그래서 here