ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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()+"}");
            }
    
        }
    }
    

     

     

     

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

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

    댓글

Designed by Tistory.