티스토리 뷰
들어가며
- 본 글은 책 '모던 자바 인액션'을 토대로 정리한 내용이며 지극히 본인의 생각으로 몰랐던, 학습이 필요한 부분을 골라서 작성한 글입니다.
스트림 슬라이싱
- 스트림의 요소를 선택하거나 스킵하는 다양한 방법을 설명한다. 스트림의 처음 몇개의 요소를 무시하는 방법, 특정 크기로 스트림을 줄이는 방법 등등
프레디케이트를 이용한 슬라이싱
- 자바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] PNG 파일에 Meta 데이터 추가하는 방법 (0) | 2020.08.07 |
---|---|
[Java] URL로 부터 File Download 하는 방법 (0) | 2020.08.05 |
[Java] Apache poi 사용시 "Zip bomb detected.." 에러 발생시 해결법 (0) | 2020.08.01 |
[Java] Apache poi 엑셀 Cell 스타일링 방법 (배경, 테두리, 폰트 등) (0) | 2020.07.29 |
[Java] 함수형 인터페이스 예외 처리 방법 (0) | 2020.07.29 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- effectivejava
- 스프링부트
- 이펙티브자바
- git
- 인텔리제이
- 일본 배낭여행
- 방통대 과제물
- 자바
- 자전거
- TableView
- 일본 여행
- 배낭여행
- JavaFX
- JavaFX 테이블뷰
- 텐트
- springboot
- JavaFX 종료
- java
- Java UI
- effective java
- JavaFX Window Close
- 이펙티브 자바
- 일본 자전거 여행
- 일본여행
- 이펙티브
- intelij
- 배낭 여행
- 자전거 여행
- windows
- JavaFX Table View
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함