티스토리 뷰
JDK 8부터 stream을 이용하여 데이터를 쉽게 변환, 수집할 수 있다. 반복문을 돌려서 필요한 데이터를 가져오는 것보다 훨씬 직관적이고 코드도 짧다. 람다식을 사용하여 함수지향적이고, C#의 linq와 유사한 부분이 많다.
ArrayList, HashMap 같은 컬렉션 클래스들은 모두 stream() 메서드를 이용해 스트림을 생성할 수 있다. 그 외에 배열같은 경우 java.util.Stream의 Stream.of() 함수를 이용해 스트림을 생성할 수 있다.
이런 stream을 이용해 아래와 같이 필요한 데이터를 아주 간단하게 뽑아낼 수 있다.
public class DTO {
private int type;
private String data;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
...
List<DTO> dtoList = dao.getAllDtos();
Map<Integer, List<DTO>> dtoListByType = dtoList.stream()
.collect(Collectors.groupingBy(dto -> dto.getType()));
위 코드는 DTO라는 클래스의 객체가 담긴 리스트에서 type 별로 List를 분류해 Map에 저장하는 코드이다. 이것을 stream을 사용안하고 그냥 반복문으로 처리했다면 위 코드보다 훨씬 길어질 것이다.
데이터를 가공할 때 stream을 사용한다면 위처럼 아주 간결하고 가독성 좋은 코드로 만들 수 있다.
람다와 스트림에 대한 자세한 내용은 아래 링크에 나와 있으니 보자. stream이 좋은 건 확실하지만 항상 좋은 것은 아니다. 아래의 참조 링크에서 좋지 않은 경우도 한 번 살펴보자.
* 참조
람다와 스트림
https://rebeccacho.gitbooks.io/java-study-group/content/chapter14.html
stream이 좋지 않을 때
'프로그래밍 > Java' 카테고리의 다른 글
Garbage Collection (Hotspot JVM GC) (1) | 2019.05.21 |
---|---|
JVM 구조 및 메모리 (0) | 2019.02.11 |
Log 남기기 (0) | 2018.08.09 |
Java thread-safe singleton (0) | 2018.07.18 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Check point within polygon
- Bean
- Linux
- MySQL
- thymeleaf cannot resolve
- Express
- npm
- @Qualifier
- Barycentric coordinates
- 클로저
- JavaScript
- thymeleaf 변수 인식
- @Autowired
- @Component
- Closure
- @Bean
- spring batch
- chunk
- Bin
- spring
- Tasklet
- unity
- nodejs
- mybatis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함