반응형 SMALL 모던 자바 인 액션14 chapter 6 문제풀이 (6.5.2 응용하기 참고) reverse 구현 public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5); List result = numbers.stream() .collect(new ReverseCollector()); System.out.println(result); // [5, 4, 3, 2, 1]} ```java public class ReverseCollector implements Collector { @Override public Supplier supplier() { return ArrayList::new; //수집 연산의 시발점 } public BiConsumer accumulator() { return List::add.. 2023. 7. 22. chapter 6 스트림으로 데이터 수집 02 분할 분할 함수(partitioning function)라 불리는 프레디케이트를 분류 함수로 사용하는 특수한 그룹화 기능 분할 함수는 불리언을 반환하므로 맵의 키 형식은 Boolean 그룹화 맵은 최대 (참 or 거짓을 갖기 때문에) 2개의 그룹으로 분류됨. Map vegetarianDishesByType =menu.stream().collect( partitioningBy(Dish::isVegetarian,// 분할 함수 groupingBy(Dish::getType) //두 번째 컬렉터 ) ); {false={FISH=[prawns, salmon], MEAT=[pork, beef, chicken]}, true={OTHER=[french fries, rice, season fruit, pizza]}}분할.. 2023. 7. 22. chapter 6 스트림으로 데이터 수집 01 # 6.1 컬렉터란 무엇인가? Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정한다. 리스트를 만들기위해 toList를 Collector 인터페이스의 구현으로 사용하거나 groupingBy를 이용해서 각 키 버킷에 대응하는 요소 별로 맵을 만들 수도 있다. ## 6.1.1 고급 리듀싱 기능을 수행하는 컬렉터 컬렉터의 최대 강점은 collect로 결과를 수집하는 과정을 간단하면서도 유연한 방식으로 정의할 수 있다는 점이다. 스트림에서 collect를 호출하면 collect에서는 리듀싱 연산을 이용해서 스트림의 각 요소를 방문하면서 컬렉터가 작업을 수행한다. 보통 함수를 요소로 변환할 때는 컬렉터를 적용하며 최종 결과를 저장하는 자료구조에 값을 누적한다. ## 6.1.2 미리 정.. 2023. 7. 22. chapter 5 스트림 활용 4장에서는 스트림을 이용해서 외부 반복을 내부 반복으로 바꾸는 방법을 살펴봤다. 데이터 컬렉션 반복을 명시적으로 관리하는 외부 반복 코드다. List vegetarianDishes = new ArrayList(); for(Dish d:menu){ if(d.isVegetarian()){ vegetarianDishes.add(d); } } 명시적 반복 대신 filter와 collect 연산을 지원하는 스트림 API를 이용해서 데이터 컬렉션 반복을 내부적으로 처리할 수 있다. List vegetarianDishes = menu.stream() .filter(Dish::isVegetarian) .collect(Collectors.toList()); 5.1 필터링 5.1.1 프레디케이트로 필터링 스트림 인터페이스.. 2023. 7. 22. chapter 4. 스트림 소개 SQL 질의 언어에서는 기대하는 필터링을 어떻게 구현해야 할지 명시할 필요가 없으며 구현은 자동으로 제공한다. 컬렉션으로도 이와 비슷한 기능을 만들 수 있지 않을까? 또한, 멀티코어 아키텍처에서 컬렉션을 병렬처리를 통해 성능을 높이는 방법을 쉽게 제공할 수는 없을까? → 이 질문의 답은 스트림이다. 4.1 스트림이란 무엇인가? 스트림은 자바 8 API에 새로 추가된 기능이다. 다음과 같은 특징을 갖는다 선언형 스트림을 이용하면 선언형(데이터를 처리하는 임시 구현 코드 대신 질의로 표현)으로 컬렉션 데이터를 처리할 수 있다. 더 간결하고 가독성이 좋아짐 조립할 수 있음 filter, sorted, map, collect 같은 여러 빌딩 블록 연산을 연결해서 복잡한 데이터 처리 파이프라인을 만들 수 있다. .. 2023. 7. 21. chapter 3. 람다 표현식 람다 표현식 더 깔끔한 코드로 동작 구현 및 전달하는 자바 8의 새로운 기능 람다 표현식은 익명 클래스처럼 이름이 없는 함수이면서 매서드를 인수로 전달할 수 있다. 3.1 람다란 무엇인가? 람다 표현식은 매서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 익명 : 보통의 메서드와 달리 이름이 없다. 함수 : 특정 클래스에 종속되지 않는다. 전달 : 메서드 인수로 전달, 변수로 저장 가능 간결성 : 익명 클래스처럼 코드 구현 필요 X 1) 기존 코드 Comparator byWeight = new Comparator() { @Override public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeigh.. 2023. 7. 21. 이전 1 2 3 다음 반응형 LIST