2010-11-26 5 views
1

Existe-t-il un équivalent à Single de LINQ dans Java? Peut-être dans lambdaj?Single de LINQ en java?

+1

Vérifiez celui-ci: github.com/nicholas22/jpropel-light, exemple: String [] {"james", "john", "jean", "eddie"} .where (startsWith ("j")). ToList(). Distinct(); –

+0

jpropel semble bien, mais je ne peux pas le trouver dans Maven repo. dommage ... –

Répondre

8

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. .)

+0

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

+0

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

+0

@ 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 :( –

0

Version moins défensive de la solution @ Jon.

Collection<T> coll; 
T first = col.iterator().next(); 

Ajouter des contrôles au goût.

+2

Ce serait plus proche de la méthode 'First' de LINQ –

-1

Si vous pouvez utiliser ma bibliothèque xpresso vous pouvez écrire: x.list(iterable).toScalar();