티스토리 뷰
스트림 슬라이싱
- 스트림의 요소를 선택하거나 스킵하는 다양한 방법을 설명한다.
- 스트림의 처음 몇개의 요소를 무시하는 방법, 특정 크기로 스트림을 줄이는 방법 등등
프레디케이트를 이용한 슬라이싱
- 자바9에서는 스트림의 요소를 효과적으로 선택할 수 있도록
takeWhile
,dropWhile
두 가지 메서드를 지원한다.
TAKEWHILE
List<Dish> specialMenu = Arrays.asList(
new Dish("seasonal fruit". true, 120, Dish.Type.OTHER),
new Dish("prawans". true, 300, Dish.Type.FISH),
new Dish("rice". true, 350, Dish.Type.OTHER),
new Dish("chicken". true, 400, Dish.Type.MEAT),
new Dish("french fries". true, 530, Dish.Type.OTHER));
- 만일 위와 같은 리스트에서 320 칼로리 이하의 요리만 가지고 오고 싶다고 해보자.
- 스트림을 사용한다고 하면
filter
메서드를 이용하면 될 것이다.
List<Dish> filteredMenu = specialMenu.stream()
.filter(dish -> dish.getCalories() < 320)
.collect(toList());
- 현재는 filter 연산이 리스트 전부에게 적용이 된다.
- 여기서 좀 더 나아가서 생각을 해보자면 위 specialMenu는 정렬된 리스트이기 때문에 320칼로리 보다 큰 요리가 나오면 반복을 중단시킬 수 있다.
- 만약 리스트가 훨씬 크다면 최적화의 여지가 있을 수 있음
- 이때
takeWhile
연산을 이용하게 되면 간단하게 목적을 이룰 수 있다.- 이때
takeWhile
은 Predicate를 받음
- 이때
List<Dish> filteredMenu = specialMenu.stream()
.takeWhile(dish -> dish.getCalories() < 320)
.collect(toList());
DROPWHILE
takeWhile
연산의 정반대 작업을 수행한다.- Predicate가 처음으로 거짓이 되는 지점까지 발견된 요소를 버린다.
- Predicate가 거짓이 되는 시점에 작업을 중단하고 이후 남은 요소를 반환한다.
List<Dish> filteredMenu = specialMenu.stream()
.dropWhile(dish -> dish.getCalories() < 320)
.collect(toList());
스트림 축소
- 스트림은 주어진 값 이하의 크기를 값는 새로운 스트림을 반환하는
limit(n)
메서드를 지원한다.
List<Dish> filteredMenu = specialMenu.stream()
.filter(dish -> dish.getCalories() > 300)
.limit(3)
.collect(toList());
요소 건너뛰기
- 스트림은 처음 n개 요소를 제외한 스트림을 반환하는
skip(n)
메서드를 지원한다. - 아래는 300 칼로리 이상의 처음 두 요리를 건너뛴 다음에 해당되는 요리를 반환한다.
List<Dish> filteredMenu = specialMenu.stream()
.filter(dish -> dish.getCalories() > 300)
.skip(2)
.collect(toList());
참고
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] "NoClassDefFoundError: javax/xml/soap/SOAPMessage.." 에러 발생시 해결방법 (0) | 2020.09.29 |
---|---|
(Java) Gson 사용시 보기 좋은 Pretty Json String 변환하는 방법 (0) | 2020.08.25 |
(Java) Key, Mouse Hooking(리스너) 기능 구현 방법 (0) | 2020.08.10 |
[Java] Video URL 다운로드 시에 전체 다운로드 되지 않는 경우 해결방법 (0) | 2020.08.09 |
(Java)Apache Poi 사용시 "The maximum number of Cell Styles was exceeded.." 이슈 해결법 (2) | 2020.08.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 자전거
- effective java
- springboot
- TableView
- intelij
- 배낭여행
- 인텔리제이
- 배낭 여행
- git
- JavaFX Window Close
- 일본여행
- Java UI
- 방통대 과제물
- 자전거 여행
- 스프링부트
- java
- JavaFX
- 이펙티브자바
- JavaFX Table View
- 일본 여행
- 이펙티브 자바
- effectivejava
- JavaFX 테이블뷰
- 일본 배낭여행
- 자바
- 일본 자전거 여행
- JavaFX 종료
- 텐트
- 이펙티브
- windows
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함