스터디 책 정리/모던 자바 인 액션 4

병렬 데이터 처리와 성능

병렬 스트림 stream() 대신 parallelStream()을 사용하면 병렬 스트림이 생성된다. 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림으로 서 멀티코어 프로세서가 각각의 청크를 처리하도록 할당할 수 있다. 순차 스트림을 병렬 스트림으로 변경 public logn parallelSum(Long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel()

스트림으로 데이터 수집

Collector Collector 인터페이스 구현은 스트림 요소를 어떤 식으로 도출할지 지정한다. Collector 인터페이스 메서드를 어떻게 구현하느냐에 따라 스트림에 어떤 리듀싱 연산을 수행할지 결정된다. Collectors 유틸리티 클래스는 자주 사용하는 컬렉터 인스턴스를 손쉽게 생성할 수 있는 정적 팩토리 메서드를 제공한다. Collectors에서 제공하는 메서드의 기능은 크게 세 가지로 구분할 수 있다. 스트림 요소를 하나의 값으로 리듀스하고 요약 요소 그룹화 요소 분할 리듀싱과 요약 counting - 개수를 카운트한다 maxBy, minBy - 최대 혹은 최소를 만족하는 요소를 찾는다 summingInt - 객체를 int로 매핑하는 인수를 받아 합을 계산한다 averagingInt - 객체..

스트림 활용

필터링 프리디케이트로 필터링 프리디케이트 필터링 예시 코드 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) .distinct() 슬라이싱 프리디케이트 슬라이싱 컬랙션 리스트가 정렬이 되어 있어야한다. takeWhile : 조건이 거짓이 될때 까지 수행하며 참인 값을 리턴 dropWhile : 조건이 거짓이 될때 까지 수행하며 참인 값을 버리고 나머지를 리턴 스트..

스트림

자바8 버전부터 API에 추가된 새로운 기능으로 데어터처리시 코드 구현이 아닌 선언형으로 컬렉션 데이터를 처리할 수 있다. parallelStream()을 사용한다면 멀티스레드 코드로 구현하지 않더라도 병렬처리가 가능하다. 기존의 자바 코드 8버전 미만 List lowCaloricDishes = new ArrayList(); for (Dish dish : menu) { if (dish.getCalories() < 400) { lowCaloricDishes.add(dish); } } Collections.sort(lowCaloricDishes, new Comparator() { public int compoare(Dish dish1, Dish dish2) { return Integer.compare(dis..

320x100