2016-05-17 7 views
1

sagen, dass ich eine Liste Adressaten haben, und die Eigenschaften für die Adresse sind
1. ID
2. Name
3. Staatliche
Dann habe ich eine get-Methode zu erhalten eine Adresse von IDWie kehre ich Objekte mit lambdas java

public Address get(Integer id) { 
    for (Address myAddress : addresses) { 
     if (myAddress.getId() == id) { 
      return myAddress; 
     } 
    } 
    return null; 
} 

Dies ist, wie es ohne lambda
aussehen würde Wie kann ich die Adresse mit lambda zurückkehren?

+0

Mögliche doppelte: http://stackoverflow.com/questions/23696317/java -8-find-first-element-by-predicate –

Antwort

1

Es sollte nach Ihrem Kontext etwas wie:

// Find any address that matches 
addresses.stream().filter(a -> a.getId() == id).findAny(); 

oder

// Find the first address that matches 
addresses.stream().filter(a -> a.getId() == id).findFirst(); 

Der erste Ansatz ist vor allem interessant, wenn Sie die Suche mit addresses.parallelStream().filter(a -> a.getId() == id).findAny() parallelisieren wollen, wird es viel schneller als der zweite Ansatz, da es aufhören wird zu suchen, sobald wir ein Ergebnis haben. Der zweite Ansatz ist interessanter, wenn Sie nicht beabsichtigen, ihn zu parallelisieren, was hier der Fall zu sein scheint.

So schließlich gibt es:

public Address get(Integer id) { 
    return addresses.stream() 
     .filter(a -> a.getId() == id) 
     .findFirst().orElse(null); 
} 
+0

Äh, warum würdest du nicht 'return result.orElse (null)' schreiben? –

+0

@LouisWasserman +1 –

+0

@LouisWasserman behoben thx –

0

Ich werde dies tun:

public Address get(Integer id) { 
    return addresses.stream() 
     .filter(a -> a.getId().equals(id)) 
     .findFirst() 
     .orElse(null); 
} 

Prost

+0

ahhh ich sehe, ich fehlte die findFirst() am ende. Auch in Ihrem Filter sollte es getId() == id;) sein, aber es funktioniert. Vielen Dank! –

+1

Meinst du, dein Address-Objekt enthält ein ID-Feld vom Typ int, aber deine Methodensignatur ist Integer-ID? –

+0

yeah sorry, das sollte ich besser geklärt haben. –