SummaryBook/[모던 자바 인 액션] 5

[Chap 6] 스트림으로 데이터 수집

6.1 컬렉터란 무엇인가? Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정한다. 6.1.1 고급 리듀싱 기능을 수행하는 컬렉터 collect로 결과를 수집하는 과정을 간단하면서도 유연한 방식으로 정의 할 수 있다는 점이 컬렉터의 최대 강점이다. 구체적으로 설명해서 스트림에 collect를 호출하면 스트림의 요소에 리듀싱 연산이 수행된다. Collectors 유틸리티 클래스는 자주사용하는 컬렉터 인스턴스를 손쉽게 생성 할 수 있는 정적 팩토리 메서드를 제공한다. Ex) 가장 많이 사용하는 직관적인 정적 메서드로 collect(Collectors.toList); 6.1.2 미리 정의된 컬렉터 미리 정의된 컬렉터는 groupingBy 같이 Collectors 클래스에서 제공하는 ..

[Chap 5] 스트림 활용

5.1 필터링 5.1.1 프레디케이트로 필터링 스트림 인터페이스는 filter 메서드를 지원한다. filter 메서드는 프레디케이트를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. /** * 5.1.1 프레디케이트로 필터링 */ List menu = new ArrayList(); List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) // 채식 요리인지 확인하는 메서드참조 .collect(Collectors.toList()); 5.2 스트림 슬라이싱 5.2.1 프레디케이트를 이용한 슬라이싱 TAKEWHILE 활용 List specialMenu = Arrays.asList( new Dish("seasonal frui..

[Chap 4]스트림 소개

4.1 스트림이란 무엇인가? 스트림은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리 할 수 있다. 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리 할 수 있다. Ex) 기존 자바 7 코드 /** * 기존 자바 7코드 */ List lowCaloricDishes = new ArrayList(); List menu = new ArrayList(); for (Dish dish : menu) { if (dish.getCalories() < 400) { lowCaloricDishes.add(dish); } } Collections.sort(lowCaloricDishes, new Comparator() { // 익명 클래스 사용 @Ove..

[Chap 3]람다 표현식

3.1 람다란 무엇인가? 람다 표현식은 메서드로 전달 할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생 할 수 있는 예외 리스트는 가질 수 있다. 다음은 람다의 특징이다. 1. 익명 - 보통의 메서드와 달리 이림이 없으므로 익명이라 표현한다. 2. 함수 - 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식 ,가능한 예외 리스트를 포함한다. 3. 전달 - 람다 표현식을 메서드 인수로 전달하거나 변수로 저장 할 수 있다. 4. 간결성 - 익명 클래스처럼 많은 코드를 구현 할 필요가 없다. 람다표현식을 사용시 간결한 방식으로 코드를 전달 할 수있다. 람다가 ..

[Chap 2]동작 파라미터화 코드 전달하기

동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 효과적으로 대응 할 수 있다. 동작 파라미터화란 아직은 어떻게 실행 할 것인지 결정하지 않은 코드 블록을 의미한다. 즉, 코드블록에 따라 메서드의 동작이 파라미터화된다. 2.1 변화하는 요구사항에 대응하기 2.1.1 첫번째 시도 : 녹색 사과를 필터링 public enum Color { RED, GREEN } public static List filterGreenApples(List inventory) { List result = new ArrayList(); // 사과 누적 리스트 for (Apple apple : inventory) { if (Color.GREEN.equals(apple.getColor())) { // 녹색사과 만 선택 result.a..