자바 스트림 (대체 for 루프) [중복]

Dec 01 2020

저는 Java를 처음 접했고 Streams로 시스템을 이해하려고 노력하고 있습니다.

예에서 다음 코드가 있습니다.

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

훈련 목적으로 더 많은 연습을 위해 스트림으로 오래된 메서드 (대부분 for 루프로)를 다시 작성하기 시작했습니다. 그러나이 작은 방법은 javadocs (+ Google)로 3 명 이상을 계속 유지했으며 여전히 무엇이 잘못되었는지 알지 못합니다. 컴파일도하지 않습니다 : /

위의 내용을 대체해야하는 내 "새"코드 :

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

ArrayList 주석은 (당시) 작성자의 주석 하나만 저장할 수 있습니다. 작성자가 새 댓글을 작성하면 이전 댓글이 삭제됩니다. 이는 .findFirst (); 정말 필요하지 않습니다.

제 생각에는 객체가 하나만 남을 때까지 ArrayList의 범위를 좁혀서 return 문에 돌려주는 것이 가능해야합니다 ... 내가 맞습니까 아니면 잊은 것이 있습니까?

편집 (01.12.2020, 10:13) : 첫 번째 코드 조각을 편집해야했습니다. 반환 문이 잘못되었습니다 (오타 ...)

답변

1 Mureinik Dec 01 2020 at 05:47

findFirst를 반환합니다 Optional. 그 변환하기 위해 OptionalA와 Comment객체도없고이 경우 처리 Comment당신이 그것에있는 동안 발견을, 당신은 사용할 수 있습니다 orElse:

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