2017-11-20 1 views
1

Ich versuche, Friend von firstName und lastName mit Stream zu finden. Ist es möglich, ein Objekt aus diesem Stream zurückzugeben? Wie ein Freund mit diesem Namen und Nachnamen? Weil jetzt die Rückgabe nicht übereinstimmt.Objekt aus Stream abrufen JAVA

@Override 
public Friend findFriend(String firstName, String lastName) throws FriendNotFoundException { 
    if (firstName == null || lastName ==null) { 
     throw new IllegalArgumentException("There is no parameters"); 
    } 

      List<Friend> result = friends.stream() 
      .filter(x -> (firstName.equals(x.getFirstName())) && 
      (lastName.equals(x.getLastName())))) 
      .collect(Collectors.toList()); 

      return result; 
+2

Rufen Sie 'findAny()' oder 'findFirst()' anstelle von 'collect()' auf. – shmosel

Antwort

2

nutzen findFirst etwa so:

return friends.stream() 
       .filter(x -> firstName.equals(x.getFirstName()) && 
          lastName.equals(x.getLastName()) 
        ) 
       .findFirst().orElse(null); 

oder zurückgeben ein Optional<Friend> dh:

@Override 
public Optional<Friend> findFriend(String firstName, String lastName) throws FriendNotFoundException { 
     if (firstName == null || lastName == null) { 
      throw new IllegalArgumentException("There is no parameters"); 
     } 

     return friends.stream() 
       .filter(x -> firstName.equals(x.getFirstName()) && 
          lastName.equals(x.getLastName()) 
        ) 
       .findFirst(); 
} 

das dann bedeutet, dass das Verfahren sind zwingende Sie müssen auch ein Optional<Friend> zurückzukehren deklariert werden und So weiter die Vererbungshierarchie, wenn nötig.

+0

hat es funktioniert! Vielen Dank! – Donne

+0

Schöner Hinweis mit dem Optional. Vielleicht möchten Sie aber 'findAny()' verwenden. Es könnte effizienter für große Streams sein. –

+0

@MalteHartwig true, würde ich 'findAny' empfehlen, wenn Massenoperationen mit parallelStream durchgeführt werden, da es weniger einschränkend ist,' findAny' in diesem Fall zu verwenden, als 'findFirst' zu verwenden. –

Verwandte Themen