본문 바로가기
기타/이펙티브 자바

[이펙티브자바] 7.람다와 스트림

by 창이2 2022. 7. 25.

1.

 

2. 람다보다는 메서드 참조를 사용하라.

2.1. 메서드 참조가 람다보다 더 간결한 경우 메서드 참조를 이용해라.

2.2. 메서드 참조는 5가지의 유형이 있다.

더보기
유형 메서드 참조 람다
Static Integer::parseInt str -> Integer.parseInt(str)
Bounded Instant.not()::isAfter Instant instant = new Instant.now()
t -> instant .isAfter(t)
UnBounded String::toLowerCase str -> str.toLowerCase()
Class Constructor TreeMap<K, V>::new () -> new TreeMap<K, V>()
Array Constructor int[]::new len -> new int[len]

 

3. 표준 함수형 인터페이스를 사용하라.

3.1. 함수형 인터페이스의 대표적인 6가지를 기억하라.

더보기
인터페이스 함수 시그니처
UnaryOperator<T> T apply(T t) String::toLowerCase
BinaryOperator<T> T apply(T t1, T t2) BigInteger::add
Predicate<T> boolean test(T t) Collection::isEmpty
Function(T, R) R apply(T t) Arrays::asList
Supplier<T> T get() Instant::now
Consumer<T> void accept(T t) System.out::println

 

3.2. Wrapper 클래스의 기본타입 보다 Primitive원시 타입을 이용해라.

 

4. 스트림은 주의해서 사용하라.

4.1. 스트림은 시작지점 -> 중간연산(변환) -> 종료 연산 으로 진행된다.

4.2. 종료 연산을 호출해야 스트림이 시작된다. 

참고

4.3. 무분별한 Stream사용은 가독성과 성능을 해치므로 아래 경우를 만족하면 사용하자.

 4.3.1 원소들의 시퀀스를 일관되게 변환

 4.3.2 원소들의 시퀀스를 필터링

 4.3.3 원소들의 시퀀스를 하나의 연산을 사용해 결합

 4.3.4 원소들의 시퀀스를 컬렉션에 모으기

 4.3.5 원소들의 시퀀스에 특정 조건을 만족하는 원소를 찾기

 

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

5.1. forEach 연산은 스트림 계산 결과를 보고할때만 사용하고 계산하는데는 쓰지말자.

 

6. 반환 타입으로는 스트림보다 컬렉션이 낫다.

6.1. Stream은 Iterable을 확장하지 않는다.

 

댓글