Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- java stream api
- equals
- Java lombok
- equals override
- Github action deploy
- java 비동기처리
- AliasFor
- github action codedeploy
- Spring Aspect
- github action
- github CI/CD
- github CI
- java hashCode
- kotest
- AWS Codedeploy
- Java Wrapper Class
- lombok Builder
- 코드포스
- vanilla js image slider
- Java
- stream groupingby
- github deploy
- SpringBootApplication
- c++ 빌드
- javascript image slider
- java CompletableFuture
- github ec2 deploy
- list remove
- hashcode override
- image slider
Archives
- Today
- Total
기록창고
Collectors GroupingBy 본문
Todo List 웹를 만드는 도중 DB 에서 가져온 데이터를 현재 진행 현황에 맞춰서 분리해서 보여줘야할 때가 있었다.
public class TodoDto {
private int id;
private String title;
private String step;
} // getter 와 setter 와 constructor는 모두 구현되어있다고 가정한다.
DB 쿼리는 전부를 가져오는 쿼리문이였따.
SELECT * FROM todo;
쿼리를 step 별로 던지면 안해도 됐을 거 같지만 ....
처음 코드는 모두를 가져와서 iterator를 돌면서 step 에 맞게 list 에 추가했다.
List<TodoDto> todoList = getList(); // 전부를 가져온다.
List<TodoDto> doingList = new ArrayList<>();
List<TodoDto> doneList = new ArrayList<>();
for(Iterator<TodoDto> it = todoList.iterator(); it.hasNext();) {
TodoDto todo = it.next();
String step = todo.getStep();
if(step == "TODO") { ... }
else if(step == "DOING") { ... }
else if(step == "DONE") { ... }
else { /* 예외처리 */ }
}
// 아래로 진행
위의 코드처럼 iterator를 돌면서 추가를 하니까 코드가 길어보이고
불필요한 코드가 많아진거 같다는 코드 리뷰가 있었다.
그래서 찾아보니 Stream API 중 groupingBy 이라는 함수가 있었다.
Map<String, List<TodoDto>> listGroupByStep = todoList.stream()
.collect(Collectors.groupingBy(TodoDto::getStep));
// listGroupByStep.get("TODO") => step이 TODO 인 List를 리턴한다.
// listGroupByStep.get("DOING") => step이 DOING 인 List를 리턴한다.
길었던 코드가 한줄로 바뀌고, groupingBy라는 걸 모르는 사람이 봐도 딱 알게 생겼다.
JAVA stream이 굉장하게 좋다는 걸 깨닫는 순간이였다...
다 좋지만 단점이라고 생각하는게 하나 있었다.
위처럼 iterator로 돌면 TODO, DOING, DONE 이외의 것이 혹시 들어가 있는 경우
else 문으로 빼서 예외처리나 그 다음 대응이 가능하다.
물론 아직 groupingBy에 대해 다 알지 못하기 때문에 이런 기능이 혹시 있을 지 모르나..
짧은 생각에는 예외처리가 불편할 거 같다.. (ENUM으로 하면 자동으로 error가 발생할까..?)
그럼에도 불구하고 되게 편하다.
'JAVA' 카테고리의 다른 글
기본형과 래퍼 클래스(Wrapper Class) (0) | 2020.02.18 |
---|---|
String.equals() (0) | 2020.01.19 |
JAVA List for 문으로 remove하기 (0) | 2020.01.05 |
equals() override (0) | 2019.12.28 |
hashCode() override (0) | 2019.12.27 |
Comments