2014-04-29 1 views
3

자바 8에서 detect 메서드를 찾고있었습니다. 저는 스몰 토크에서 사용 했었지만 자바는 가지고 있지 않은 것 같습니다. Smalltalk의 detect 메서드는 표현식의 결과에 따라 첫 번째 요소를 찾습니다. 예 :Java에서 스몰 토크의 탐지 방법이 있습니까?

Listnumbers.detect[number->number>4] 

4보다 큰 요소가 있으면 해당 요소를 반환합니다.

Collection<T> collection = ... // 

Optional<T> optionalFirst = collection.stream() 
           .filter(e -> /* some predicate */) 
           .findFirst(); 

가 존재하는 경우 조건을 만족 컬렉션의 첫 번째 요소를 찾을 수 :

+1

무엇을 찾으시겠습니까? –

+1

은 "탐지"의 의미에 따라 달라집니다. 좀 더 구체적으로 표현할 수 있습니까? 예 : – Snox

+2

: aBlock은 aBlock이 true로 평가되는 컬렉션의 첫 번째 요소를 반환합니다. (from http://www.ipass.net/vmalik/smalltalk.html#Q16) –

답변

9

자바 8에서는 스트림 API를 사용할 수 있습니다.

2

또는하지 않고는 스몰 토크에서 영감을했다 Eclipse Collections를 사용하는 경우, 당신은 자바 8 람다와 함께 사용할 수있는 방법 detect:detect:ifNone:를 찾을 수

for(T t: collection) 
    if(t.test()) { 
     // do something with t 
     break; 
    } 
1

을 할 수있는 스트리밍합니다. 예를 들어

:

MutableList<Integer> numbers = Lists.mutable.with(1, 2, 3, 4, 5); 
Integer result = numbers.detect(each -> each > 4); 
Assert.assertEquals(Integer.valueOf(5), result); 

이클립스 (구 GS 컬렉션) 컬렉션 및 this article on InfoQ 자바 8 detect, select, reject, collect 사용의 더 많은 예들이있다. Eclipse Collections 7.x는 Java 5 - 7에서 계속 실행중인 응용 프로그램과도 사용할 수 있습니다.

참고 : Eclipse Collections의 커미터입니다.