Apache использует PredicatedList без исключения IllegalArgumentException - PullRequest
2 голосов
/ 06 мая 2009

Есть ли способ в Apache Commons Collections иметь PredicatedList (или аналогичный), который не вызывает исключение IllegalArgumentException, если объект, который вы пытаетесь добавить, не соответствует предикат? Если он не совпадает, он просто проигнорирует запрос на добавление элемента в список.

Так, например, если я сделаю это:

List predicatedList = ListUtils.predicatedList(new ArrayList(), PredicateUtils.notNullPredicate());
...
predicatedList.add(null); // throws an IllegalArgumentException 

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

Я не могу понять из JavaDocs, поддерживает ли Commons Collections это. Я хотел бы сделать это, если это возможно, без использования собственного кода.

Ответы [ 2 ]

1 голос
/ 06 мая 2009

Разве вы не можете просто проглотить исключение?

try
{
    predicatedList.add(null);
}
catch(IllegalArgumentException e)
{ 
    //ignore the exception
}

Вы, вероятно, должны написать обертку, чтобы сделать это для вас ...

0 голосов
/ 06 мая 2009

Только что найдено CollectionUtils.filter . Я, вероятно, могу переделать свой код, чтобы использовать это, хотя было бы неплохо сначала незаметно предотвратить добавления в список.

    List l = new ArrayList();
    l.add("A");
    l.add(null);
    l.add("B");
    l.add(null);
    l.add("C");

    System.out.println(l); // Outputs [A, null, B, null, C]

    CollectionUtils.filter(l, PredicateUtils.notNullPredicate());

    System.out.println(l); // Outputs [A, B, C]
...