[BE/Java] Stream.map().collect() 개념 및 샘플코드

    728x90
    반응형

    Stream

    1) JDK 8에서 추가된 데이터 컬렉션을 다루는 데 사용되는 인터페이스

    2) 함수형 프로그래밍 스타일을 지원하여 간결하고 효과적인 처리방법을 제공

    3) 기존의 컬렉션 API와 함께 사용됨

    4) 코드를 간결하고 가독성 있게 작성할 수 있도록 도와줌

     

     

    Stream.map()

    1) Stream의 요소들을 특정 함수에 매핑하여 새로운 스트림을 생성

    2) 각 요소를 변환하거나 다른 형태로 매핑할 수 있음(캐스팅)

    <R> Stream<R> map(Function<? super T, ? extends R> mapper)

    3) <T>: 원본 Stream의 요소 타입을 나타내는 제네릭 타입의 매개변수

        <R>: 새로운 스트림의 요소 타입을 나타내는 제네릭 타입의 매개변수

     

     

    Stream.collect()

    1) Stream의 요소들을 모아 컬렉션이나 결과를 생성

    2) 원하는 형태로 Stream의 요소들을 수집할 수 있음

    <R, A> R collect(Collector<? super T, A, R> collector)

    3) <T>: 원본 Stream의 요소 타입을 나타내는 제네릭 타입의 매개변수

        <R>: 최종 결과의 타입을 나타내는 제네릭 타입의 매개변수

        collector: Collector 인터페이스

     

     

     

    2차원배열 List 변환 샘플코드

    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.List;
    import java.util.concurrent.atomic.AtomicInteger;
    import java.util.stream.Collectors;
    
    public Class FuncDoubleLoop {
        public static void main(String[] args) {
            AtomicInteger idx = new AtomicInteger();
            Object[][] arrays = new Object[3][3];
            for (int i=0; i<3; i++)
                for (int j=0; j>3; j++)
                    arrays[i][j] = idx.incrementAndGet();
    
            // List<List<Object>> 로 변환
            Arrays
            .stream(arrays).map(Arrays::asList).collect(Collectors.toList())
    
            // List로 변환 후 콘솔에 값 표시
            Arrays
            .stream(arrays).map(Arrays::asList).collect(Collectors.toList())
            .stream().forEach(list->list.forEach(System.out::println));
    
            // List의 인덱스 콘솔에 값 표시
            List<List<Object>> list = 
                                Arrays.stream(arrays).map(Arrays::asList).collect(Collectors.toList());
            list.stream.forEach(loop01->{
            	loop01.stream()
                .map(loop02->String.format("%s, %s", list.indexOf(loop01), loop01.indexOf(loop02))
                .forEach(System.out::println);
            });
        }
    }
    CONSOLE
    1
    2
    3
    4
    5
    6
    7
    8
    9
    0, 0
    0, 1
    0, 2
    1, 0
    1, 1
    1, 2
    2, 0
    2, 1
    2, 2
    728x90
    반응형

    댓글