2011-04-26 5 views
1

이 광기인가, 아니면이 스파르타입니까?Groovy 요소 비교

groovy:000> b = [1,2,3,4] 
===> [1, 2, 3, 4] 
groovy:000> b.count { !it.equals(4) } 
===> 0 
groovy:000> b.count { !it == 4 }  
===> 0 
groovy:000> b.count { it == 4 } 
===> 0 
groovy:000> b.count { it == 1 } 
===> 0 
groovy:000> b[0] 
===> 1 
groovy:000> b.each { println it } 
1 
2 
3 
4 
===> [1, 2, 3, 4] 
groovy:000> print b.class 
class java.util.ArrayList===> null 
groovy:000> b.each { println it.class } 
class java.lang.Integer 
class java.lang.Integer 
class java.lang.Integer 
class java.lang.Integer 
===> [1, 2, 3, 4] 
groovy:000> 4.equals(b[3]) 
===> true 
groovy:000> 

나는 여기에 "놀랄만 한 기대"의 경우를 실행 중입니다. 그루비 (Groovy)는 정수형의 ArrayList를 가지고 있다고 말하며 위의 3 가지 쿼리와 같은 귀여운 검색을 모두 간결하고 멋지게 수행 할 수 있어야한다고 생각합니다. 하지만.

  1. 위를하는 관용적 그루비 방법은 무엇입니까 (요소의 수를 계산 여기서 x! = 일부 요소)
  2. 왜이 일을하지 않습니다? 메서드 서명

    public Number count(Closure closure) 
    

    는 그루비 1.8.0부터 지원되는지

답변

3

인식 (현재의 생산은 1.7.10입니다) - 그루비 1.8 전에 http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#count(groovy.lang.Closure)

를 참조 코드는 위의 메소드를 호출 'count (Object value)'. 콜렉션 내에서 주어진 값의 발생 횟수를 계산합니다. 실제 매개 변수 '값'으로 클로저 인스턴스를 제공하면 위에서 설명한 결과가 발생합니다.

위를하기의 관용적 그루비 방법 (요소의 수를 계산 X = 일부 요소를!) 무엇
+0

BTW : "! it == 4 "는 항상 false를 반환하고"it! = 4 " –

+0

+1로 작성해야 좋은 설명과 나쁜 의미 j0j0을 잡을 수 있습니다. –

3

여기 하나 개의 방법 :

def list = [3, 5, 3] 

def countElementsNotEqualTo3 = list.findAll{ it != 3 }.size() 
assert countElementsNotEqualTo3 == 1 
+0

이것은이 간결한 언어에 대해서는 약간 장황한 것처럼 보이지만 요구 사항을 공정하게 충족시킵니다. –