2010-11-26 11 views
1

Gibt es eine Entsprechung zu LINQ Single in Java? Vielleicht in lambdaj?LINQs Single in Java?

+1

prüfen diese ein: github.com/nicholas22/jpropel-light, Beispiel: new String [] {"James", "John", "John", "Eddie"} .where (StartsWith ("j")). ToList(). Distinct(); –

+0

jpropel scheint nett, aber ich kann es nicht in maven repo finden. schade ... –

Antwort

8

Es ist ein ziemlich leicht selbst zu implementieren, um ehrlich zu sein:

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; 
} 

(Oder es in einer allgemeinen Klasse setzt stattdessen die Methode generisch machen Sie entscheiden, können auch eine andere Ausnahmetyp zu verwenden. .)

+0

Dennoch bevorzuge ich @ Emils Antwort, wenn man davon ausgeht, dass Guave leicht genug ist. Mit Maven ist der Import von Drittanbieter-Bibliotheken so einfach, dass die "Integriere eine neue Bibliothek" -Schranke verringert wird. Siehe auch http://stackoverflow.com/questions/4263607/what-is-the-de-facto-standard-for-action-func-klassen – ripper234

+0

Übrigens, wo warst du in den letzten Tagen ??? Ich habe in den letzten Tagen ungefähr 25 Fragen gestellt, einige von ihnen sind immer noch unbeantwortet, und ich bin mir sicher, dass Sie die Antworten zu 90% von ihnen kennen :) Fast alle von ihnen sind wichtiger als diese Frage ... http: // stackoverflow.com/users/11236/ripper234 – ripper234

+0

@ ripper234: Oh Guava ist eine wunderbare Bibliothek, und wenn Sie gerne eine zusätzliche Bibliothek verwenden, ist es * absolut * wert, zu haben. Und wenn man sich die ersten paar Seiten Ihrer Fragen ansieht, handelt es sich um datenbankbezogene, die ich nicht kennen würde :( –

0

Eine weniger defensive Version von @ Jons Lösung.

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

Fügen Sie Schecks nach Geschmack hinzu.

+2

Das wäre näher an der "Ersten" Methode von LINQ. –

-1

Wenn Sie meine xpresso Bibliothek verwenden, können Sie schreiben: x.list(iterable).toScalar();

Verwandte Themen