개발언어/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()+"}");
        }

    }
}

 

 

 

[출처 - 자바의 정석 - 기초편 , 저 남궁성]

https://www.youtube.com/watch?v=0Sp9eFRV8gE