repository를 jpa를 통해서 extend 하여 생성하게 되면 List 혹은 Iterable로 반환하게 되어있다. 그중 나는 CrudRepository를 주로 사용하는 편이여서 Iterable을 통해 Dto나 Vo로 변환하여 반환하는 경우가 많아 정리해두려고 한다.
@Override
public List<ResponseAdminUser> findAll() {
Iterable<String> users = Arrays.asList("test1","test2","test3");
List<String> list = new ArrayList<>();
users.forEach(list::add);
return null;
}
data를 forEach를 돌려야할 경우 다음과 같이 사용하면 된다.
@Override
public List<ResponseAdminUser> findAll() {
//Iterable<AdminUser> users = adminUserRepository.findAll();
Iterable<String> users = Arrays.asList("test1","test2","test3");
List<String> list = ImmutableList.copyOf(users);
return null;
}
List로의 변환은 다음과 같이 간단하게 할수도 있다.
@Override
public List<ResponseAdminUser> findAll() {
//Iterable<AdminUser> users = adminUserRepository.findAll();
Iterable<String> users = Arrays.asList("test1","test2","test3");
List<String> list = StreamSupport.stream(users.spliterator(), false).collect(Collectors.toList());
return null;
}
stream을 이용하여 사용하고자 한다면 다음과 같이 사용하면 되고 parallel의 값을 true로 바꿔주면 병렬 처리가 가능하다.
병렬로 처리한다고 꼭 빠른 것은 아니다. 데이터를 병렬화하기 위해 스트림을 재귀적으로 분할하고 쓰레드를 할당하고 그 결과를 연산하는데 걸리는 시간까지 계산했을 때 오히려 병렬 연산이 더 느릴 수도 있다.