IT'S DO
728x90

쓰다보니 코드를 간결하게 만들 수 없을 까 라는 생각이 들었고, 그것을 어떻게 쓰면 될까 하다가 찾아보니

stream api로 하면 아래와 같이 더 간결하게 만들 수 있다고 한다. 그래서 나중에 또 생각나면 정리할 겸 쓰게 되었다.

 

적용전

public List<CategoryResponseDto> findAll() {
    List<Category> list = categoryRepository.findAll();
    Map<Long, CategoryResponseDto> dtoMap = new HashMap<>();

    for (Category category : list) {
        dtoMap.put(category.getId(), new CategoryResponseDto(category));
    }

    for (Category category : list) {
        if (category.getPrnts() != null) {
            CategoryResponseDto parentDto = dtoMap.get(category.getPrnts().getId());
            parentDto.getChildren().add(dtoMap.get(category.getId()));
        }
    }

    return dtoMap.values().stream()
            .filter(dto -> dto.getPrntsId() == null)
            .collect(Collectors.toList());
}

 

 

stream API

public List<CategoryResponseDto> findAll() {
    List<Category> list = categoryRepository.findAll();
    Map<Long, CategoryResponseDto> dtoMap = list.stream()
            .collect(Collectors.toMap(Category::getId, CategoryResponseDto::new));

    list.stream()
            .filter(category -> category.getPrnts() != null)
            .forEach(category -> {
                CategoryResponseDto parentDto = dtoMap.get(category.getPrnts().getId());
                parentDto.getChildren().add(dtoMap.get(category.getId()));
            });

    return dtoMap.values().stream()
            .filter(dto -> dto.getPrntsId() == null)
            .collect(Collectors.toList());
}

 

적용전

@Transactional(readOnly = true)
public CategoryResponseDto findById(Long id) {
    Category category = categoryRepository.findById(id)
            .orElseThrow(() -> new EntityNotFoundException("Category not found"));

    List<CategoryResponseDto> childrenDtos = new ArrayList<>();
    for (Category child : category.getChildren()) {
        childrenDtos.add(findById(child.getId()));
    }

    return new CategoryResponseDto(category, childrenDtos);
}

 

=

 

stream API

@Transactional(readOnly = true)
public CategoryResponseDto findById(Long id) {
    Category category = categoryRepository.findById(id)
            .orElseThrow(() -> new EntityNotFoundException("Category not found"));

    List<CategoryResponseDto> childrenDtos = category.getChildren().stream()
            .map(child -> findById(child.getId()))
            .collect(Collectors.toList());

    return new CategoryResponseDto(category, childrenDtos);
}
profile

IT'S DO

@멋진놈

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!