// Java7
List<Dish> lowCaloricDishes = new ArrayList<>();
for (Dish d : menu) {
// 400 칼로리 미만인 음식만 리스트에 넣는다
if (d.getCalories() < 400) {
lowCaloricDishes.add(d);
}
}
//Java8 스트림 이용
List<Dish> lowCaloricDishes = menu.stream()
.fileter(d -> d.getCalories() < 400)
.collect(Collectors.toList());
스트림은 단 한번만 탐색 할 수 있다
List<String> title = Arrays.asList("Java8", "In", "Action");
Stream<String> s = title.stream();
s.forEach(System.out::println); // title이ㅡ 각 단어 출력
s.forEach(System.out::println);
// java.lang.IllegalStateException 발생
// 첫 forEach에서 스트림이 이미 사용되었다
// forEach를 다시한번 실행하기 위해서는 스트림을 새로 생성해야 한다
스트림은 내부에서 알아서 처리해주기때문에 사용자가 명시적으로 코드를 작성할 필요가 없다 (Internal Iteration)
// External Iteration
List<String> names = new ArrayList<>();
for (Dish d : menu) {
naems.add(d.getName());
}
// Internal Iteration
List<String> names = menu.stream()
.map(Dish::getName())
.collect(Collectors.toList());
List<String> names = menu.stream()
// 중간 연산
.filter(d -> d.getCalories() > 300)
// 중간 연산
.map(Dish::getName)
// 중간 연산
.limit(3)
// 최종 연산(스트림 -> 리스트 변환)
.collect(Collectors.toList());