forEach() 는 java 8 부터 나온 손쉽게 for 문을 돌릴 수 있는 기능이다.
예를 들어
List<User> userList = userRepository.findAll();
List<UserSignUpDto> userSignUpDtoList = new ArrayList<>();
userList.forEach(user ->
userSignUpDtoList.add(
UserSignUpDto.builder()
.email(user.getEmail())
.password(user.getPassword())
.build()
)
);
이렇게 리스트에 있는 유저를 DTO에 옮겨 리스트에 담고 싶다면
forEach로 손쉽고^_^ 깔끔하게 옮길 수 있단 사실~
그런데 급 궁금증이 들었다 ㅡ.ㅡ
만약 ListSize() 가 0 이라면, forEach 는 동작하지 않을 텐데
그러면 예외를 발생시킬까?
지금은 PM님도 안 건드린다는 점심 시간.
이 시간을 틈타 테스트해보자.
void forEach도는지_테스트() {
List<User> userList = new ArrayList<>();
List<UserSignUpDto> userSignUpDtoList = new ArrayList<>();
userList.forEach(user -> {
userSignUpDtoList.add(
UserSignUpDto.builder()
.email(user.getEmail())
.password(user.getPassword())
.build()
);
}
);
}
이제 돌려보자
정상적으로 동작하는 것을 알 수 있다.
그런데 두 번째 궁금증이 생겼다.
stream() 에서도 forEach() 를 사용 가능하다.
스트림은 forEach 뿐만 아니라 filter 등 함수 여러개를 조합해서 병렬처리할 수 있는 기능 아주 멋진 기능이다.
한 마디로 반복 작업을 한번에 쇽쇽쇽 할 수 있다는 얘기지..
여기에서 forEach 를 사용해도 예외가 발생하지 않을까?
시도해보자!
void streamForEach도는지_테스트() {
List<User> userList = new ArrayList<>();
List<UserSignUpDto> userSignUpDtoList = new ArrayList<>();
userList.stream().forEach(user -> {
userSignUpDtoList.add(
UserSignUpDto.builder()
.email(user.getEmail())
.password(user.getPassword())
.build()
);
}
);
}
결과는?
뭐가 없넹? 쩝,,, 노잼(?)
병렬 처리 작업이라 뭔가 더 있지 않을까 생각했는데
생각해보면 한 스레드가 작업을 뭉탱이로 묶어서 하는 것뿐이고,,
멀티스레드 "처럼" 이지 멀티스레드 작업은 아니니께 뭐,,ㅎㅋㅎㅋ
이제 forEach 를 쓸 때 사이즈 체크는 굳이 하지 않는 걸로 !
이렇게 하나 또 알아갑니다.. ㅎㅁㅎ
728x90
'개발공부 개발새발 > JAVA' 카테고리의 다른 글
Hello, Java 21 ! (0) | 2023.09.23 |
---|---|
JAVA ) GC & JVM (0) | 2023.07.21 |
Junit5 Test ) Controller 를 테스트 해보자! (0) | 2023.07.01 |
Junit5 Test ) Service 를 테스트 해보자! (0) | 2023.07.01 |
JpaRepository 를 사용하는 클래스를 테스트를 하고 싶어요! (0) | 2023.05.31 |