스트림3 [정리] 모던 자바 인 액션 - 스트림 활용(2) 만약 스트림을 활용해 아래와 같은 질의를 수행하려면 어떻게 해야할까? '메뉴에서 칼로리가 가장 높은 요리는?' '메뉴의 모든 칼로리의 합계는?' 리듀싱 리듀싱 연산은 모든 스트림 요소를 처리해서 하나의 값으로 도출하는 연산을 말한다. 위와 같은 질의는 리듀싱 연산을 사용하여 해결할 수 있다. 리듀싱 내 두 번째 인자로 계산된 결과값은 다음 스트림 요소의 입력 인자가 된다. 리듀싱 연산은 스트림이 하나의 값으로 줄어들 때까지 연산을 반복해서 조합한다. // 기본적인 반복문 int sum = 0; // sum 변수의 초기값 for (int x : numbers) { sum += x; // sum 값을 도출하기 위해 반복되는 연산 (+) } // 리듀스를 사용 // 첫 번째 인자 : sum 초기값 0 // 두.. 2023. 1. 8. [정리] 모던 자바 인 액션 - 스트림 활용(1) 필터링 filter(Predicate) : boolean을 반환하는 Predicate를 인수로 받아 일치하는 요소만 포함하는 스트림 반환 distinct() : 고유 요소로만 이루어진(=중복 제거된) 스트림 반환 // Predicate로 필터링 : boolean을 반환하는 Predicate을 인수로 받아 일치하는 요소만 필터링 List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); // 고유 요소 필터링 : distinct로 고유 요소 필터링 List numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4); numbers.stream() .filter(i -> i % 2 == 0) .d.. 2023. 1. 7. [정리] 모던 자바 인 액션 - 스트림 소개 스트림은 자바 8 API에 새로 추가된 기능으로, 스트림을 사용하면 선언형(구현코드 대신 질의의 형태)로 컬렉션 데이터를 처리할 수 있다. 선언형의 예로 데이터베이스 질의를 들 수 있는데, SELECT name FROM disches WHERE calorie < 400 ORDER BY calorie는 칼로리가 400 미만인 요리명을 출력하라는 SQL질의이며 결과를 얻기 위해 질의할 뿐 구체적인 구현 코드를 전달하진 않는다. 만약 자바 7 코드로 위 예제를 구현하려 했다면 아래와 같았을 것이다. // 400 칼로리보다 아래인 dish들만 수집 List lowCaloricDishes = new ArrayList(); for(Dish dish: menu) { if(dish.getCalories < 400){ .. 2023. 1. 6. 이전 1 다음