[java]stream (lambda)

공부기록·2023년 11월 23일
post-thumbnail

예시를 보며 이해하기로 한다.

MemberCommandServiceImpl 中 일부

@Transactional
    public Member joinMember(MemberRequestDTO.JoinDto request) {
		// DTO -> Member 객체 생성
        Member newMember = MemberConverter.toMember(request);
        List<FoodCategory> foodCategoryList = request.getPreferCategory().stream()
                .map(category -> {
                    return foodCategoryRepository.findById(category).orElseThrow(() -> new FoodCategoryHandler(ErrorStatus.FOOD_CATEGORY_NOT_FOUND));
                }).collect(Collectors.toList());

        List<MemberPrefer> memberPreferList = MemberPreferConverter.toMemberPreferList(foodCategoryList);

        memberPreferList.forEach(memberPrefer -> {memberPrefer.setMember(newMember);});

        return memberRepository.save(newMember);
    }
  • foodCategoryList: request로 들어온 FoodCategory 타입의 List(Collertor)가 존재한다. 이를 스트림으로 변환하고, map()을 이용하여 각 카테고리를 다른 형태로 반환한다.



 List<FoodCategory> foodCategoryList = request.getPreferCategory().stream()
                .map(category -> {
                    return foodCategoryRepository.findById(category).orElseThrow(() -> new FoodCategoryHandler(ErrorStatus.FOOD_CATEGORY_NOT_FOUND));
                }).collect(Collectors.toList());
  • .map()에는 category라는 매개변수가 들어가는데 category란 getPreferCategory()에서 반환된 각 카테고리에대한 카테고리id이다.
  • 해당 카테고리ID를 통하여 FoodCategory에서 객체를 찾은 후 .collect(Collectors.toList())를 사용하여 변환된 카테고리 목록을 리스트로 수집한다.



List<MemberPrefer> memberPreferList = MemberPreferConverter.toMemberPreferList(foodCategoryList);
  • toMemberPreferList()를 이용하여 FoodCategory객체인 foodCategoryList를 MemberPrefer객체로 변환시킨다.

  • 변환 함수
public class MemberPreferConverter {

    public static List<MemberPrefer> toMemberPreferList(List<FoodCategory> foodCategoryList){

        return foodCategoryList.stream()
                .map(foodCategory ->
                        MemberPrefer.builder()
                                .foodCategory(foodCategory)
                                .build()
                ).collect(Collectors.toList());
    }
}



memberPreferList.forEach(memberPrefer -> {memberPrefer.setMember(newMember);});
  • forEach를 이용하여 memberPrefer에 존재하는 객체들에게 Member를 설정한다.






출처 : UMC 5기 워크북

0개의 댓글