2011-04-14 7 views
0

그래서 나는 다음 있습니다. 나는이 객체들을 List에 넣기를 원하지만 그것들이 null이 아닌 경우에만 넣고 싶다.자바 내부 클래스/폐쇄

나는 한 줄의 줄을 쓸 수있다 : if(a!=null) {myList.add(a} 등등. 그러나 나는 null 체크를 할 필요가 없도록하는 더 우아한 방법이 있다는 느낌을 가지고있다. (이렇게하기 위해 도우미 메서드를 만드는 것 외에).

예를 들어 자바 스크립트를 사용하면 클로저를 만들 수 있습니다. Java에 대한 아이디어가 있습니까?

+3

작은 oneliner 도우미 방법에 어떤 문제가 있습니까? – RoflcoptrException

+0

아무 문제가 없습니다. 하지만 인라인 클래스를 사용하여 동적 언어로 구현할 수있는 인라인 클로저 유형 솔루션 (람다라고 생각하십시오)을 시뮬레이트하는 방법이 있는지 알고 싶었습니다. 또한 유틸리티 메소드가 아니라 인라인을 갖는 일회성 로직을 제거하면 유용하다는 것을 알 수 있습니다. – jack

+0

문제는 람다와 유사한 구조가 Java에 있지만 다른 언어에서와 같이 간결하지는 않아서 (아마도 개인용) 도우미 메서드가 가장 우아한 해결책이된다는 것입니다. –

답변

3

, 조건에 자바

필터링과 폐쇄의 사용에 매우 성숙 주어진 조건은 매우 일반적인 작업이며 lambdaj를 사용하면 다음 예제와 같이 쉽게 수행 할 수 있습니다.

List<Integer> biggerThan3 = filter(greaterThan(3), asList(1, 2, 3, 4, 5)); 

목록을 필터링하는 방법을 정의하는 조건은 hamcrest 정규 표현식으로 표시됩니다.

또는 당신은 당신이 아마 개념을 사용 coud

7

유틸리티 방법은 어떻습니까?

가 컬렉션의 항목을 필터링하려면 : 당신은 Google 코드에 Project LambdaJ을 시도 할 수

public static <T> void addIfNotNull(Collection<T> col, T element){ 
    if(element != null){ 
     col.add(element); 
    } 
} 
+0

물론 가능합니다. 하지만 내 질문은이 일을하지 않고 방법이 있는지 물어 보았다 ("이 일을 돕는 방법을 만드는 것 외에는"). 하지만 아무리 감사드립니다. – jack

+0

수표는 확실히 어딘가에 이루어질 것입니다. –

0
List list = new ArrayList(); 

add(data.getA()); 
add(data.getB()); 
add(data.getC()); 

private add(Object o) { 
    if (o != null) { 
     list.add(o); 
    } 
} 
관련 문제