안녕세계
[Java] 컬렉션 프레임워크와 함수형 인터페이스 본문
[Java] 컬렉션 프레임워크와 함수형 인터페이스
Junhong Kim 2020. 2. 19. 21:18지난 포스팅에 이어서 본 포스팅에서는 Java8에서 컬렉션 프레임워크에 추가된 함수형 인터페이스에 대해 알아봅니다.
인터페이스 | 메서드 | 설명 |
Collection | boolean removeIf(Predicate<T> filter) | filter 조건의 element 제거 |
List | void replaceAll(UnaryOperator<T> operator) | 모든 element를 operator 수행 결과로 반환 |
Iterable | void forEach(Consumer<T> action) | 모든 element에 대해 action 수행 |
Map | V compute(K key, BiFunction<K, V, V> f) | 특정 key에 대해 f 수행 |
V computeIfAbsent(K key, Function<K, V> f) | 특정 key가 없을 경우 f 수행 후 추가 | |
V computeIfPresent(K key, BiFunction<K, V, V> f) | 특정 key가 있을 경우 f 수행 후 반환 | |
V merge(K key, V value, BiFunction<V, V, V> f) | 특정 key에 대해 f 병합 수행 | |
void forEach(BiConsumer<K, V> action) | 모든 element에 대해 action 수행 | |
void replaceAll(BiFunction<K, V, V> f) | 모든 element에 대해 f 수행 결과로 반환 |
Collection
boolean removeIf(Predicate<T> filter)
List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < 10; i++) {
numbers.add(i);
}
numbers.removeIf(number -> number % 2 == 0);
System.out.println(numbers); // [1, 3, 5, 7, 9]
List
void replaceAll(UnaryOperator<T> operator)
List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < 10; i++) {
numbers.add(i);
}
numbers.replaceAll(number -> number * 10);
System.out.println(numbers); // [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
void forEach(Consumer<T> action)
List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < 10; i++) {
numbers.add(i);
}
numbers.forEach(number -> {
System.out.print(number); // 0123456789
});
Map
V compute(K key, BiFunction<K, V, V> f)
해당 key를 반환 값으로 변경, key가 없을 경우 java.lang.NullPointerException 발생
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
System.out.println(map); // {A=1, B=2, C=3}
map.compute("A", (key, value) -> value + 10);
System.out.println(map); // {A=11, B=2, C=3}
V computeIfAbsent(K key, Function<K, V> f)
key가 존재할 경우 수행하지 않음, key가 존재하지 않으면 key=value 값을 Map에 추가
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
System.out.println(map); // {A=1, B=2, C=3}
map.computeIfAbsent("A", (key) -> 10);
System.out.println(map); // {A=1, B=2, C=3}
map.computeIfAbsent("D", (key) -> 10);
System.out.println(map); // {A=1, B=2, C=3, D=10}
V computeIfPresent(K key, BiFunction<K, V, V> f)
key가 존재할 경우 해당 key를 반환 값으로 변경, key가 존재하지 않으면 수행하지 않음
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
System.out.println(map); // {A=1, B=2, C=3}
map.computeIfPresent("A", (key, value) -> value * 10);
System.out.println(map); // {A=10, B=2, C=3}
map.computeIfPresent("D", (key, value) -> value * 10);
System.out.println(map); // {A=10, B=2, C=3}
V merge(K key, V value, BiFunction<V, V, V> f)
key가 존재할 경우 해당 key를 반환 값으로 변경, key가 존재하지 않으면 key=value 값을 Map에 추가
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
System.out.println(map); // {A=1, B=2, C=3}
map.merge("A", 1, (key, value) -> map.get("A") + 10);
System.out.println(map);
map.merge("D", 4, (key, value) -> map.get("A") + 10);
System.out.println(map);
void forEach(BiConsumer<K, V> action)
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
System.out.println(map); // {A=1, B=2, C=3}
map.forEach((key, value) -> System.out.print(value)); // 123
void replaceAll(BiFunction<K, V, V> f)
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
System.out.println(map); // {A=1, B=2, C=3}
map.replaceAll((key, value) -> value * 10);
System.out.println(map); // {A=10, B=20, C=30}
각 인터페이스가 어떤 결과를 가져오는지 한 눈에 볼 수 있도록 설명과 예제 소스를 함께 기록합니다.
Java8 컬렉션 프레임워크의 함수형 인터페이스를 사용할 때 이번 포스팅이 좋은 CheatSheet가 되기를 바랍니다!! 😎
감사합니다.
'Language > Java' 카테고리의 다른 글
[Java] 스레드 로컬 (Thread Local ) (0) | 2023.08.27 |
---|---|
[Java] jenv 설치 및 사용법 (MacOS 여러 Java 버전 설치) (0) | 2021.03.21 |
[Java] 함수형 인터페이스 (Functional Interface) (0) | 2020.02.11 |
[Java] 람다(Lambda) (0) | 2020.02.10 |
[Java] Intellij에서 Java/JDK 설정 (0) | 2019.11.25 |