Java-Stream (Ersatz für for-Schleife) [Duplikat]
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
findFirst
gibt ein zurück Optional. Um dies in Optional
ein Comment
Objekt zu konvertieren und den Fall zu behandeln, in dem keine Comment
gefunden 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
}