개발언어/JAVA
JAVA 람다와 스트림 - 컬렉션 프레임워크(CF)와 함수형 인터페이스
Surge100
2023. 12. 18. 16:50
컬렉션 프레임워크(CF)와 함수형 인터페이스
JDK 1.8(Java8)부터 함수형 인터페이스 기능이 추가 되었다 그러면서 컬렉션 프레임워크에도 많은 변화가 있었다. 람다식을 사용해서 작업을 좀더 쉽게 처리할 수 있는 메서드들이 추가 된 것이다.
▶ 함수형 인터페이스를 사용하는 컬렉션 프레임워크의 메서드(와일드 카드 생략)
인터페이스 | 메서드 | 설명 |
Collection | boolean removeIf(Predicate<E> filter) | 조건에 맞는 요소를 삭제 |
List | void replaceAll(UnaryOperator<E> operator) | 모든 요소를 변환하여 대체 |
iterable | void forEach(Consumer<T> action) | 모든 요소에 작업 action을 수행 |
Map | V compute(K key, BiFunction<K,V,V> f) | 저장된 키의 값에 작업 f를 수행 |
V computeIfAbsent(K key, Function<K,V> f) | 키가 없으면, 작업 f 수행 후 추가 | |
V computeIfPresent(K key, BiFunction<K,V,V> f) | 저장된 키가 있을 때. 작업 f 수행 | |
V merge(K key, V value, BiFunction<V,V,V> f) | 모든 요소에 병합작업 f를 수행 | |
void forEach(Biconsumer<K,V> action) | 모든 요소에 작업 action을 수행 | |
void replaceAll(BiFunction<K,V,V> f) | 모든 요소에 치환작업 f를 수행 |
예시 메서드
list.forEach( i -> System.out.print( i +",")); // list의 모든 요소를 출력
list.removeIf( x -> x%2==0 || x%3==0 ); // 2 또는 3의 배수를 제거
list.replaceAll( i -> i*10 ); // 모든 요소에 10을 곱한다.
// map의 모든 요소를 { k,v }의 형식으로 출력
map.forEach( (k,y) -> System.out.print("{"+ k +","+ y +"}"))
정리 예제
package lambdaFunction;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class cfExample {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
for(int i=0;i<10;i++){
list.add(i);
}
//list의 모든 요소를 출력(iterator)
list.forEach(i -> System.out.print(i+","));
System.out.println();
//과거 방식
Iterator it = list.iterator();
while (it.hasNext()){
System.out.print(it.next()+",");
}
System.out.println();
//list에서 2또는 3의 배수를 제거한다.(Collection)
list.removeIf( x -> x%2==0 || x%3==0);
System.out.println(list);
//list의 각 요소에 10을 곱한다.(List)
list.replaceAll(i->i*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.put("5","5");
//map의 모든 요소를 {k,v}의 형식으로 출력한다.
map.forEach((k,v) -> System.out.print("{"+ k +","+ v +"}" ));
System.out.println();
//과거의 방식
Iterator it2 = map.entrySet().iterator();
while (it2.hasNext()){
System.out.print( "{"+it2.next()+"}");
}
}
}
[출처 - 자바의 정석 - 기초편 , 저 남궁성]