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

kimjaehyo0623님의 프로필 이미지
kimjaehyo0623

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

퀴즈 #10

퀴즈#10 질문있습니다.

작성

·

185

0

 map(x -> x.age >= 20 ? x.name + " 5000원" : x.name + " 무료")

이렇게 된다는 것은 Customer 객체 x의 age가 20세 이상이면 Customer 객체 x의 이름의 내용이

' 챈들러 5000원 ' 이렇게 바뀌는 건가요?

아직 map이 어렵습니다.

답변 2

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

네, 맞습니다. 코드에서 list는 ArrayList<Customer> 형식의 객체이며 list.stream()은 list를 스트림으로 변환합니다. 그리고 .map() 메서드는 스트림의 각 요소에 대해 지정된 함수를 적용하여 새로운 요소로 매핑하구요.

map(x -> x.age >= 20 ? x.name + " 5000원" : x.name + " 무료") // Stream<String>

위 코드는 각 Customer 객체를 입력으로 받아서 조건에 따라 문자열을 생성합니다. x.age >= 20은 x의 age가 20 이상인지 확인하는 조건입니다.

이 조건식이 참이면

x.name + " 5000원"

이 반환되고, 조건식이 거짓이면

x.name + " 무료"

가 반환됩니다.

결국 20세 이상인 Customer 객체의 이름은 " 5000원" 이 추가된 String 으로 바뀌게 되지요.
만약 map 부분을 다음과 같이 바꿔서 이름은 출력하지 않고 5000 또는 0 이라는 가격 정보만 매핑하게 되면 Integer 로 바뀌게 된답니다.

map(x -> x.age >= 20 ? 5000 : 0) // Stream<Integer>

궁금증 해결에 도움되길 바라겠습니다 😊
감사합니다.

0

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

제가 다시 생각해보니 map 때문에 리스트스트림의 내용이 Customer 객체에서 String name으로 바뀌는 것 같은데 맞을까요?

네 맞습니다. 찾아보니 filter()는 컬렉션에 담겨있던 데이터들을 조건식을 통해 데이터들을 여과하여 더 작은 컬렉션에 담아두는 역할을 합니다. 이와 달리, map()은 stream에 담겨있는 데이터들을 조건식을 통해 변형시키는 것이고, 제시된 문제는 String과 String을 더하는 것이라서 그대로 연산된 String 형태를 출력하는 거라 볼 수 있죠

자세한 사항은 아래의 링크를 참고해주세요

 https://mangkyu.tistory.com/114

kimjaehyo0623님의 프로필 이미지
kimjaehyo0623

작성한 질문수

질문하기