Java akışı (döngü için değiştirme) [çoğalt]

Dec 01 2020

Java'da yeniyim ve sistemi Akışlar ile öğreniyorum / anlamaya çalışıyorum.

Bir örnekte aşağıdaki koda sahibim:

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

Eğitim amacıyla, daha fazla pratik yapmak için bazı eski yöntemleri (çoğu for-loop'larla) akışlarla yeniden yazmaya başladım. Ancak bu küçük yöntem javadocs (+ Google) ile üçten fazla bizim için devam etmemi sağladı ve hala sorunun ne olduğunu bilmiyorum - derlemeyecek bile: /

İşte yukarıdakinin yerini alması gereken "yeni" kodum:

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

ArrayList yorumları (o anda) bir yazardan yalnızca bir yorumu depolayabilir. Bir yazar yeni bir yorum yazarsa, eskisi silinir. Bu, .findFirst (); gerçekten gerekli değil.

Bana göre ArrayList'i tek bir nesne kalana kadar daraltmak ve bunu return ifadesine geri vermek mümkün olmalı ... Haklı mıyım yoksa bir şeyi mi unutuyorum?

Düzenleme (01.12.2020, 10:13): İlk kod parçasını düzenlemem gerekiyordu. Dönüş ifadesi yanlıştı (yazım hatası ...)

Yanıtlar

1 Mureinik Dec 01 2020 at 05:47

findFirstdöndürür bir Optional. Bunu Optionalbir Commentnesneye dönüştürmek ve Commentsiz oradayken hiçbir şeyin bulunmadığı durumu ele almak için şunları kullanabilirsiniz orElse:

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