Java внутренний класс / замыкание - PullRequest
0 голосов
/ 14 апреля 2011

Итак, у меня есть следующее:

Object a = data.getA();
Object b = data.getB();
Object c = data.getC();
// and so on

Эти объекты извлекаются из вызовов API и могут быть нулевыми. Я хочу поместить эти объекты в список, но только если они не равны нулю.

Я мог бы написать несколько строк: if(a!=null) {myList.add(a} и так далее. Но у меня есть ощущение, что есть более элегантный способ, который позволил бы избежать необходимости каждый раз выполнять нулевую проверку (кроме создания вспомогательного метода для этого).

Например, с помощью javascript я мог бы создать замыкание. Есть идеи по Java?

Ответы [ 4 ]

7 голосов
/ 14 апреля 2011

Как насчет служебного метода?

public static <T> void addIfNotNull(Collection<T> col, T element){
    if(element != null){
        col.add(element);
    }
}
3 голосов
/ 14 апреля 2011

Вы можете попробовать Project LambdaJ в Google Code, он очень хорошо подходит для использования замыканий с Java

Фильтрация по условию:

Фильтрация элементов коллекции по заданному условию является очень распространенной задачей, и использовать lambdaj можно так же просто, как в следующем примере:

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

Условие, определяющее, как фильтровать список, выражается как hamcrest matcher.

Или вы можете подождать JDK 8: -)

0 голосов
/ 14 апреля 2011

вы можете использовать концепцию Maybe: http://www.natpryce.com/articles/000776.html

0 голосов
/ 14 апреля 2011
List list = new ArrayList();

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

private add(Object o) {
    if (o != null) {
        list.add(o);
    }
}
...