Java-Stream (Ersatz für for-Schleife) [Duplikat]

Dec 01 2020

Ich bin neu in Java und lerne / versuche das System mit den Streams zu verstehen.

In einem Beispiel habe ich folgenden Code:

private Comment findComment(String author)
{                 
   for(Comments comment : comments) {
        if(comment.getAuthor().equals(author)) {
            return comment;
        }
    }
    return null;
}

Zu Trainingszwecken begann ich, einige alte Methoden (die meisten davon mit for-Schleifen) mit Streams umzuschreiben, um mehr Übung zu bekommen. Aber diese kleine Methode hat mich mehr als drei Mal mit Javadocs (+ Google) beschäftigt und ich weiß immer noch nicht, was los ist - sie wird nicht einmal kompilieren: /

Hier mein "neuer" Code, der den oben genannten ersetzen soll:

private Comment findComment(String author)
{
    return comments.stream()
              .filter(s -> author.equals(s.getAuthor()))
              .findFirst();
}

In den ArrayList-Kommentaren kann (zu diesem Zeitpunkt) nur ein Kommentar eines Autors gespeichert werden. Wenn ein Autor einen neuen Kommentar schreibt, wird der alte gelöscht. Das würde bedeuten, dass die .findFirst (); ist nicht wirklich notwendig.

Meiner Meinung nach sollte es möglich sein, die ArrayList einzugrenzen, bis nur noch ein Objekt übrig ist, und es an die return-Anweisung zurückzugeben ... Habe ich recht oder vergesse ich etwas?

Bearbeiten (01.12.2020, 10:13): Ich musste das erste Code-Snippet bearbeiten. Die return-Anweisung war falsch (Tippfehler ...)

Antworten

1 Mureinik Dec 01 2020 at 05:47

findFirstgibt ein zurück Optional. Um dies in Optionalein CommentObjekt zu konvertieren und den Fall zu behandeln, in dem keine Commentgefunden wird, während Sie gerade dabei sind, können Sie Folgendes verwenden orElse:

private Comment findComment(String author)
{
    return comments.stream()
              .filter(s -> author.equals(s.getAuthor()))
              .findFirst()
              .orElse(null); // Here
}