JDK1.8버전 부터 람다식이 추가되며, Collection프레임 워크의 인터페이스에 다수의 디폴드 메서드가 추가되었다. 그 중 일부는 함수형 인터페이스를 사용한다.
※ 와일드 카드는 너무 복잡해 지기에 생략됨.
이름들만 봐도 어떤 메서드인지 알 수 있는데, Map인터페이스에 있는 'compute'로 시작하는 메서드들은 맵의 value를 변환하는 일을 하고 merge()는 Map을 병합하는 일을 한다. 이 메서드들을 어떤 식으로 사용하는 지는 아래 예제를 참고하자.
import java.util.*;
public class CollectionLambdaExample {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < 10; i++) {
list.add(i);
}
// list의 모든 요소 출력
list.forEach(i -> System.out.print(i + ", "));
System.out.println();
// list에서 2 또는 3의 배수를 제거한다.
list.removeIf(x -> x % 2 == 0 || x % 3 == 0);
System.out.println(list);
list.replaceAll(i -> i * 10); // list의 각 요소에 10을 곱한다.
System.out.println(list);
Map<String, String> map = new HashMap<>();
map.put("1", "1");
map.put("2", "2");
map.put("3", "3");
map.put("4", "4");
// map의 모든 요소를 {k, v}의 형식으로 출력한다.
map.forEach((k, v) -> System.out.print("{" + k + ", " + v + "},"));
System.out.println();
}
}
JAVA8의 람다식 덕분에 기존에 사용하기 불편하던 컬렉션 프레임 워크가 굉장히 사용하기 쉬워졌다.