김찬진의 개발 블로그

[23/07/23] Stream, flatMap 본문

1일1배움/Java

[23/07/23] Stream, flatMap

kim chan jin 2023. 7. 23. 23:19

package stream;

import java.util.Arrays;
import java.util.stream.Stream;

public class StreamEx4 {
    public static void main(String[] args) {
        System.out.println("----------------- flatMap 연습 1 -----------------");
        // Stream<String[]>
        Stream<String[]> strArrStream = Stream.of(
                new String[] {"abc", "def", "jkl"},
                new String[] {"ABC", "GHI", "JKL"}
        );
        Stream<String[]> strArrStream2 = Stream.of(
                new String[] {"abc", "def", "jkl"},
                new String[] {"ABC", "GHI", "JKL"}
        );

        // 애초에 Stream<String[]>이었는데
        // map을 사용하여 String[]을 스트림으로 만들었기 때문에 Stream<Stream<String>> 타입
        Stream<Stream<String>> strStreamStream = strArrStream.map(Arrays::stream);
        // Stream<Stream<String>> strStreamStream2 = strArrStream.map(strArr -> Arrays.stream(strArr)); // 동일한 의미
        strStreamStream.forEach(System.out::println);
        System.out.println();

        // flatMap을 사용하여 String[]을 스트림으로 만들되 펼쳐서 외부의 스트림으로 만들기 때문에 Stream<String> 타입
        Stream<String> strStream = strArrStream2.flatMap(Arrays::stream);
        // Stream<String> strStream2 = strArrStream.flatMap(strArr -> Arrays.stream(strArr)); // 동일한 의미

        strStream
                .map(String::toLowerCase)
                .distinct()
                .sorted()
                .forEach(System.out::println);
        System.out.println();


        System.out.println("----------------- flatMap 연습 2 -----------------");
        // String[]
        String[] lineArr = {
                "Believe or not It is true",
                "Do or do not There is no try"
        };

        // String[]을 스트림으로 만듦
        Stream<String> lineStream = Arrays.stream(lineArr);
        lineStream
                .flatMap(line -> Stream.of(line.split(" +"))) // 하나 이상의 공백을 기준으로 split
                .map(String::toLowerCase)
                .distinct()
                .sorted()
                .forEach(System.out::println);
        System.out.println();


        System.out.println("----------------- flatMap 연습 3 -----------------");
        // Stream<String>
        Stream<String> strStream1 = Stream.of("AAA", "ABC", "bBb", "Dd");
        Stream<String> strStream2 = Stream.of("bbb", "aaa", "ccc", "dd");

        // 애초에 Stream<String> 이었는데
        // 그걸 다시 Stream으로 만들었기 때문에 Stream<Stream<String>>
        Stream<Stream<String>> strStrmStrm = Stream.of(strStream1, strStream2);

        Stream<String> strStrm = strStrmStrm
                .map(s -> s.toArray(String[]::new))
                // Stream<String> "AAA", "ABC", "bBb", "Dd" 을 String[]로 만듦 -> {"AAA", "ABC", "bBb", "Dd"}
                // Stream<String> "bbb", "aaa", "ccc", "dd" 을 String[]로 만듦 -> {"bbb", "aaa", "ccc", "dd"}
                .flatMap(Arrays::stream);
                // String[] {"AAA", "ABC", "bBb", "Dd"} 을 flatMap을 사용하여 String[]을 스트림으로 만들되 펼쳐서 외부의 스트림으로 만들기 때문에 Stream<String> 타입
                // String[] {"bbb", "aaa", "ccc", "dd"} 을 flatMap을 사용하여 String[]을 스트림으로 만들되 펼쳐서 외부의 스트림으로 만들기 때문에 Stream<String> 타입

        strStrm
                .map(String::toLowerCase)
                .distinct()
                .forEach(System.out::println);
    }
}

'1일1배움 > Java' 카테고리의 다른 글

[23/07/25] isEmpty(), == Null 의 차이  (0) 2023.07.25
[23/07/25] Patterns  (0) 2023.07.25
[23/07/23] Arrays와 Array의 차이  (0) 2023.07.23
[23/07/20] 쓰레드  (0) 2023.07.20
[23/07/20] 기타 함수형 인터페이스  (0) 2023.07.20
Comments