Iterables.find et Iterators.find - au lieu de jeter exception, obtenir null

StackOverflow https://stackoverflow.com/questions/2543052

  •  23-09-2019
  •  | 
  •  

Question

J'utilise google-collections et en essayant de trouver le premier élément qui satisfait prédicats sinon, me retourner « null ».

Malheureusement, Iterables.find et Iterators.find jette NoSuchElementException quand aucun élément se trouve.

Maintenant, je suis obligé de le faire

Object found = null;
if ( Iterators.any( newIterator(...) , my_predicate )
{
    found = Iterators.find( newIterator(...), my_predicate )
}

Je peux entourer « try / catch » et faire la même chose mais pour mon cas d'utilisation, je vais rencontrer de nombreux cas où se trouve sans élément.

Y at-il un moyen plus simple de faire cela?

Était-ce utile?

La solution

On dirait que vous devriez utiliser Iterators.filter, vérifier la valeur de hasNext sur le itérateur retourné.

Autres conseils

Depuis Goyave 7, vous pouvez le faire en utilisant la surcharge Iterables.find () qui prend une valeur par défaut:

Iterables.find(iterable, predicate, null);

a été déposée comme une demande de fonctionnalité:

http://code.google.com/p / goyave bibliothèques / questions / détails? id = 217

Nous sommes effectivement en cours à ce sujet.

Je ne sais pas si cela est considéré comme plus simple, mais au moins il évite les exceptions et ne nécessite qu'une seule passe sur la source itérables:

public static <T> T findMatchOrNull(Iterator<T> source, Predicate<T> pred) {
    Iterator<T> matching = Iterators.filter(source, pred);
    Iterator<T> padded = Iterators.concat(matching, Iterators.<T>singletonIterator(null));
    return padded.next();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top