Pourquoi il n'y a pas de getFirst(itératif) méthode?
Iterables présente deux méthodes pour getLast
public static <T> T getLast(Iterable<T> iterable);
public static <T> T getLast(Iterable<T> iterable, @Nullable T defaultValue);
mais seulement un pour getFirst
public static <T> T getFirst(Iterable<T> iterable, @Nullable T defaultValue);
Est qu'il y a toute la conception/mise en œuvre de la raison de la rupture de symétrie?
- double possible de Dans Google Goyave (Java), pourquoi Iterables.getFirst() et getLast() sont incompatibles?
- Peut-être que vous pouvez utiliser Iterables.getOnlyElement
getOnlyElement
jetteIllegalArgumentException
si il y a plus d'un élément.getLast
ne devrait pas faire une telle chose.- C'est pourquoi je voulais dire "peut-être" - > dans certaines situations.
Vous devez vous connecter pour publier un commentaire.
Je pense que le point est qu'il n'y a aucune raison pour qu'un
getFirst(iterable)
dans ce qui pourrait être fait aveciterable.iterator().next()
. La goyave est un excellent tentative de garder l'API petite et n'a donc pas ajouter des choses qui devraient /pourraient facilement être fait d'une autre manière.D'autre part, il n'y a pas déjà un mécanisme permettant de tester si un objet iterable est vide et si donc retourner une valeur par défaut au lieu de la première valeur. Par conséquent,
getFirst(iterable, default)
.Aussi, il n'y a pas un moyen simple d'obtenir le dernier élément, donc
getLast(iterable)
etgetLast(iterable, default)
next()
seraitget(iterable, 0)
.Iterable
API de montrer pourquoi la Goyave n'ai pas ajoutergetFirst(iterable)
. L'ajout deget(iterable, index)
n'est pas la raisongetFirst(iterable)
n'existe pas depuisget(iterable, index, default)
n'a pas empêché d'ajoutergetFirst(iterable, default)
Doubles.compare
. Et en tenant compte @Daniel Fischer point, je crois qu'il devrait y avoir d'autres raisons.iterable.next()
devrait êtreiterable.iterator().next()
... mais oui, c'est la raison pour laquelle je crois.Iterables.getFirst()
. Je puis double-vérifier et utiliserIterables.get(iterable, 0)
. Je pense queIterables.getFirst()
aurait l'air plus propre, mais bon...Doubles.compare
.Comme des ajouts à @JohnB la réponse que je voudrais montrer La goyave est les devs avis à propos de
getFirst(itératif)
. Kevin Bourrillion (tête de Goyave du dev) écrit-il:Donc, vous avez un choix:
iterable.iterator().next()
,Iterables.getFirst(Iterable<T> iterable, T default)
,Iterables.get(Iterable<T>, 0)
,iterable.iterator().next()
et quelques docs) et de l'utiliser commeIterables2.getFirst(iterable)
,PS: j'ai eu le même doute il y a quelque temps et a trouvé réplique exacte de cette question à l'époque.