자바에서 함수 객체를 람다보다 더 간결하게 만드는 방법
임의의 키와 Integer값의 매핑을 관리하는 프로그램의 일부
map.merge(key, 1 (count,incr) -> count + incr);
Map에 추가된 merge메서드 사용
merge메서드는 키, 값, 함수를 인수로 받으며 주어진 키가 맵안에 아직없다면 주어진 {키,값} 쌍을 그대로 저장
람다는 두 인수의 합을 단순히 반환할 뿐이다.
람다와 기능이 같은 정적 메서드 sum을 제공
람다대신 메서드 참조를 사용하면 더 보기좋은 결과를 낼수있음
map.merge(key, 1, Integer::sum);
메서드 참조를 사용하면 더 짧고 간결하다
다음 코드가 GoshThisClassNameIsHumongous클래스 안에있다고 가정
service.execute(GoshThisClassNameIsHumongous::action);
람다로 대체한 경우
service.execute(()->action());
메서드 참조 유형 | 예 | 같은 기능을 하는 람다 |
---|---|---|
정적 | 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] |
메서드 참조 쪽이 짧고 명확하다면 메서드 참조를 쓰고 , 그렇지 않을 때만 람다를 사용하라