collect

자바 8의 함수형을 이용하면 가독성 있는 한 줄의 코드로 그룹화를 구현할 수 있다. 예를 들어 고기를 포함하는 그룹, 생선을 포함하는 그룹, 나머지 그룹으로 메뉴를 그룹화할 수 있다. 팩토리 메서드 Collectors.groupingBy를 이용하자. Map dishesByType = menu.stream().collect(groupingBy(Dish::getType)); {FISH=[parawns, salmon], OTHER=[french fries, rice, season fruit, pizza], MEAT=[pork, beef, chicken]} Dish.Type과 일치하는 모든 요리를 추출하는 함수를 groupingBy 메서드로 전달. 이 함수를 기준으로 스트림이 그룹화되므로 이를 분류 함수(cla..
컬렉터란 무엇인가? Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정한다. 명령형 코드에서는 문제 해결하는 과정에서 다중 루프와 조건문을 추가하며 가독성과 유지보수성이 크게 떨어진다. 반면 함수형 프로그래밍에서는 필요한 컬렉터를 쉽게 추가할 수 있다. 고급 리듀싱 기능을 수행하는 컬렉터 collect로 결과를 수집하는 과정을 간단하면서도 유연한 방식으로 정의할 수 있다는 점이 컬렉터의 최대 장점이다. 스트림에 collect를 호출하면 스트림의 요소에 (컬렉터로 파라미터화된) 리듀싱 연산이 수행된다. 내부적으로 리듀싱 연산이 일어나는 모습 명령형 프로그래밍에서는 우리가 직접 구현해야 했던 작업이 자동으로 수행된다. collect에서는 리듀싱 연산을 이용해서 스트림의 각 요소를 ..
List, Set, Map과 같은 java collection이 아니라, 우리가 직접 만든 클래스로 컨테이너를 사용하려면 어떻게 해야 할까? 스트림은 사용자 정의 컨테이너 객체에 수집할 수 있도록 Stream 인터페이스는 collect() 메소드를 제공한다. (Stream, IntStream, LongStream, DoubleStream 인터페이스의 collect 메소드) https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html collect(Supplier, BiConsumer, BiConsumer) (리턴타입 R) 첫 번째 매개변수, 공급자(Supplier) : 요소들이 수집될 컨테이너 객체(R)을 생성하는 역할을 한다. 순차 처리..
스트림은 최종 처리 단계에서 요소들을 수집하는 collect()를 제공하고 있다. 이 메소드를 이용하면 필요한 요소만 컬렉션으로 담을 수 있고, 요소들을 그룹핑한 후 집계(리덕션)할 수 있다. 필터링한 요소 수집 Stream의 collect(Collector collector) 메소드는 필터링, 매핑된 요소들을 새로운 컬렉션에 수집해서 리턴한다. 매개값인 Collector는 어떤 요소를 어떤 컬렉션에 수집할 것인가를 나타낸다. 타입 파라미터의 의미(T, A, R) T ⇒ 요소 A ⇒ 누적기(accumulator) R ⇒ 저장될 컬렉션 T 요소를 A 누적기가 R에 저장한다는 의미가 된다. Collector의 구현객체는 Collectors 클래스의 정적 메소드를 이용해서 이용할 수 있다. 참고) https:..
깡냉쓰
'collect' 태그의 글 목록