-
JAVA 람다와 스트림 - 컬렉션 프레임워크(CF)와 함수형 인터페이스개발언어/JAVA 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()+"}"); } } }
[출처 - 자바의 정석 - 기초편 , 저 남궁성]
'개발언어 > JAVA' 카테고리의 다른 글
JAVA 기본 - 에러 처리 구조, JAVA메모리 사용 관행 (1) 2023.12.27 JAVA 자료구조 (배열) - 주식을 사고팔기 가장 좋은 시점 (1) 2023.12.22 JAVA람다와 스트림 - Predicate의 결합 (1) 2023.12.18 JAVA 람다와 스트림 - java.util.funtion 패키지 (1) 2023.12.18 JAVA 람다와 스트림 - 함수형 인터페이스 (0) 2023.12.15