Existe-t-il un équivalent à Single de LINQ dans Java? Peut-être dans lambdaj?Single de LINQ en java?
Répondre
En utilisant Guava:
J'allais chercher un exemple dans la goyave , mais ma connexion réseau est morte :) –
Il est un peu facile de vous mettre en œuvre, pour être honnête:
public static <T> T single(Iterable<T> source) {
Iterator<T> iterator = source.iterator();
if (!iterator.hasNext()) {
throw new IllegalArgumentException("No elements");
}
T first = iterator.next();
if (iterator.hasNext()) {
throw new IllegalArgumentException("More than one element");
}
return first;
}
(ou le mettre dans une classe générique au lieu de faire la méthode générique Vous pouvez décider d'utiliser un autre type d'exception, aussi. .)
Pourtant, je préfère la réponse de @ Emil, en supposant que la goyave soit assez légère. Avec Maven, l'importation de bibliothèques tierces est si facile que la barrière «intégrer une nouvelle bibliothèque» est réduite. Voir aussi http://stackoverflow.com/questions/4263607/what-is-the-de-facto-standard-for-action-func-classes – ripper234
BTW, où étais-tu ces derniers jours ??? J'ai posé environ 25 questions au cours des derniers jours, certains d'entre eux sont toujours sans réponse, et je suis sûr que vous connaissez les réponses à 90% d'entre eux :) Presque tous d'entre eux plus important que cette question ... http: // stackoverflow.com/users/11236/ripper234 – ripper234
@ ripper234: Oh Guava est une bibliothèque merveilleuse, et si vous êtes heureux d'utiliser une bibliothèque supplémentaire, c'est * absolument * la peine d'avoir. Et en regardant les premières pages de vos questions, ils sont liés à la base de données que je ne saurais pas :( –
Version moins défensive de la solution @ Jon.
Collection<T> coll;
T first = col.iterator().next();
Ajouter des contrôles au goût.
Ce serait plus proche de la méthode 'First' de LINQ –
Si vous pouvez utiliser ma bibliothèque xpresso vous pouvez écrire: x.list(iterable).toScalar();
Vérifiez celui-ci: github.com/nicholas22/jpropel-light, exemple: String [] {"james", "john", "jean", "eddie"} .where (startsWith ("j")). ToList(). Distinct(); –
jpropel semble bien, mais je ne peux pas le trouver dans Maven repo. dommage ... –