강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

성문님의 프로필 이미지
성문

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

로그인 기능

loginservice부분 질문이요

작성

·

539

·

수정됨

1


[질문 내용]
여기에 질문 내용을 남겨주세요.

public Member login(String loginId, String password) {
    return memberRepository.findByLoginId(loginId)
            .filter(member ->  member.getPassword().equals(password))
            .orElse(null);
}
여기서 filter앞에 stream를 안 써준 이유가 뭔가요?? java8메소드를 사용하기 위해서는 stream을 앞에 선언해줘야 한다고 알고 있었는데요   

답변 1

1

안녕하세요. 성문님, 공식 서포터즈 OMG입니다.
.

login()과 findByLoginId()를 비교해보시면 차이가 보일텐데요,

findByLoginId는 findAll()의 컬렉션[[ ArrayList ]]을 순회하기 위해 stream()을 사용하지만,

 

public Optional<Member> findByLoginId(String loginId) {
    return findAll().stream()
            .filter(m -> m.getLoginId().equals(loginId))
            .findFirst();
}
   public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }

login()은 Member 객체를 감싼 Optional<Member>를 memberRepository.findByLoginId(loginId)를 호출하는 차이가 있습니다.

Optional 과 Stream의 사용 차이로 보시면 될 것 같습니다.


.
감사합니다.

성문님의 프로필 이미지
성문
질문자

리스트타입은 다건이고 Optional<Member>단건이어서 사용안하였다고 보면 될거같네요

성문님의 프로필 이미지
성문

작성한 질문수

질문하기