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);
}
'개발 > JAVA' 카테고리의 다른 글
[CORS] 해결 (Proxy Pattern) (0) | 2024.10.02 |
---|---|
VO, DTO의 차이 (0) | 2023.08.16 |
[Java] if문을 조건부 연산자로 변경 (0) | 2023.03.06 |
[JAVA] api 요청시 Return JSON 데이터 Pretty로 나오게 하는법. (0) | 2023.03.02 |
[Java] 임시 폴더 경로 가져오기 (0) | 2023.01.18 |