티스토리 뷰
728x90
forEach로 이중 for문을 돌면서 if문에 부합하면 값을 set하는 함수를 작성했다.
for (ItemResponse itemResponse : itemResponses) {
for (Zzim zzim : zzims) {
if (itemResponse.getItemId().equals(zzim.getItem().getId())) {
itemResponse.setIsZzimed(zzim.getIsZzimed());
break;
}
}
}
모양새가 영 마음에 들지 않아 최대한 스트림으로 변환해서 사용하고자 했다.
익명의 유저에게 도움을 받아 작성한 스트림 코드는 다음과 같다.
itemResponses.forEach(itemResponse -> {
zzims.stream().filter(zzim -> itemResponse.getItemId().equals(zzim.getItem().getId()))
.forEach(zzim -> {
itemResponse.setIsZzimed(zzim.getIsZzimed());
});
});
가독성면에서 더 괜찮아보여서 사용하고자 했고 성능에 큰 차이가 없다면 그대로 사용하려고 성능 테스트를 진행해보았다.
final long start = System.nanoTime();
itemResponses.forEach(itemResponse -> {
zzims.stream().filter(zzim -> itemResponse.getItemId().equals(zzim.getItem().getId()))
.forEach(zzim -> {
itemResponse.setIsZzimed(zzim.getIsZzimed());
});
});
final long end = System.nanoTime();
System.out.println(end - start);
//981500
final long start = System.nanoTime();
for (ItemResponse itemResponse : itemResponses) {
for (Zzim zzim : zzims) {
if (itemResponse.getItemId().equals(zzim.getItem().getId())) {
itemResponse.setIsZzimed(zzim.getIsZzimed());
break;
}
}
}
final long end = System.nanoTime();
System.out.println(end - start);
//56200
단 10건의 테스트를 진행했음에도 20배의 시간 차이가 났다! (단위 : ns)
(여러번 실행하여 캐싱하는 시간은 제외시켰다.)
문제는 forEach와 break
원인은 forEach에 있었다.
forEach는 해당하는 값을 찾더라도 고전적인 for loop에서처럼 break;를 할 수 없어 이중 포문을 다 돌아야 한다.
때문에 해당하는 값을 찾고 종료해야 하는 경우에는 고전적인 for loop를 사용해야 한다.
'CS > Java' 카테고리의 다른 글
자바의 G1 GC의 원리에 대해 알아보자 (0) | 2022.08.08 |
---|---|
자바의 GC가 어떻게 동작하는지 알아보자 (0) | 2022.08.07 |
자바에서 String은 왜 Immutable일까? (0) | 2022.08.02 |
자바의 equals()와 hashCode() (0) | 2022.08.02 |
자바에서 리플렉션을 통해 구현된 기능들은 왜 느릴까?? (0) | 2022.07.29 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 배포
- RequestBody
- neovim
- 아키텍처
- 도커
- Dap
- vim
- 루나빔
- IDE
- RequestParam
- ModelAttribute
- RequestPart
- 레디스
- lunarvim
- JavaScript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함