Item42 – 익명 클래스보다는 람다를 사용하라.

타입을 명시해야 코드가 더 명확할 때만 제외하고는, 람다의 모든 매개변수 타입은 생략하자, 이유는 컴파일러가 타입 정보 대부분을 제네릭에서 얻기 때문이다.


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

메소드 참조 유형 같은 기능을 하는 람다
정적 Integer::parseInt str -> Integer.parseInt(str)
한정적(인스턴스) Instant.now()::isAfter Instant then = Instant.now();
t -> then.isAfter(t)
비한정적(인스턴스) String::toLowerCase str -> str.toLowerCase()
클래스생성자 TreeMap<K,V>::new () -> new TreeMap<K,V>()
배열생성자 int[]::new len ->new int[len]


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

스트림에 맞는 상황

  • 원소들의 시퀀스를 일관되게 변환한다.
  • 원소들의 시퀀스를 필터링한다.
  • 원소들의 시퀀스를 하나의 연산을 사용해 결합한다.(더하기, 연결하기, 최솟값 구하기 등)
  • 원소들의 시퀀스를 컬렉션에 모은다.(공통된 속성을 기준으로 묶어가며)
  • 원소들의 시퀀스에서 특정 조건을 만족하는 원소를 찾는다.


Item48 - 스트림 병렬화는 주의해서 적용하라

스트림의 소스가 ArrayList, HashMap, HashSet, ConcurrentHashMap의 인스턴스거나 배열, int 범위, long 범위일 때 병렬화의 효과가 가장 좋다.


출처 : EFFECTIVE JAVA 3/E 조슈아 블로크 지음