peaches-book-study / effective-java

이펙티브 자바 3/E
0 stars 2 forks source link

Item 46. 스트림에서는 부작용 없는 함수를 사용하라 #46

Open heon118 opened 3 months ago

heon118 commented 3 months ago

Chapter : 7. 람다와 스트림

Item : 46. 스트림에서는 부작용 없는 함수를 사용하라

Assignee : heon118


🍑 서론

스트림 패러다임

🍑 본론

스트림 패러다임의 사용

스트림 패러다임을 이해하지 못한 채 API만 사용한 경우

스트림을 제대로 사용한 경우

collector

toList()                        : 리스트 수집
toSet()                         : 집합 수집
toCollection(collectionFactory) : 지정한 컬렉션 타입 수집

1. toList

2. toMap

인수가 2개인 toMap

인수가 3개인 toMap

각 키와 해당 키의 특정 원소를 연관짓는 맵 생성
Map<Artist, Album> topHits = albums.collect(
        // Album::artist : 앨범의 아티스트가 Key
        // a -> a : 앨범이 Value
        // maxBy(comparing(Album::sales)) : 두 값이 같은 Key에 맵핑될 경우, 두 앨범 중 판매량이 더 높은 앨범을 선택
        toMap(Album::artist, a->a, maxBy(comparing(Album::sales))));
마지막에 쓴 값을 취하는 맵 생성

인수가 4개인 toMap

toConcurrentMap

3. groupingBy

인수가 1개인 groupingBy

인수가 2개인 groupingBy

인수가 3개인 groupingBy

groupingByConcurrent

4. 기타 메서드

partitioningBy

사용할 일 없는 메서드

Collectors에 정의되어 있지만 '수집'과는 관련 없는 메서드

minBy / maxBy
joining

🍑 결론

스트림 파이프라인 프로그래밍의 핵심은 부작용 없는 함수 객체에 있다.
스트림뿐 아니라 스트림 관련 객체에 건네지는 모든 함수 객체가 부작용이 없어야 한다.

Referenced by