Java/공부

자바 스트림의 중간연산(2)

pakms980319 2024. 12. 11. 11:09

https://www.youtube.com/watch?v=sEa4RQGG0HU&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=167

 

[깃허브 저장소]

https://github.com/pakms980319/JavaStudy-2024-12-09

 

GitHub - pakms980319/JavaStudy-2024-12-09

Contribute to pakms980319/JavaStudy-2024-12-09 development by creating an account on GitHub.

github.com

 

스트림의 중간 연산(2) - map(), peek(), flatMap()

map() : 주어진 스트림을 다른 스트림으로 변환한다.

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

 

예시

Stream<File> fileStream = Stream.of(new File("Ex1.java"), new File("Ex1"), new File("Ex1.bak"), new File("Ex2.java", new File("Ex1.txt"));

 

* Stream<String> filenameStream = fileStream.map(File::getName);
* filenameStream.forEach(System.out.println);  // 스트림의 모든 파일의 이름을 출력
* fileStream.map(File::getName)
*           .filter(s->s.indexOf('.') != 1)         // 확장자가 없는 것은 제외
*           .map(s->s.substring(s.indexOf('.'))+1))
*           .map(String::toUpperCase)
*           .distinct()                             // 중복 제거
*           .forEach(System.out::print)             // JAVABAKTXT

 

 

peek() : 중간 작업 결과 확인 / 디버깅 / 로깅

* Stream<T> peek(Consumer<? super T> action)        // 중간 연산 (스트림을 소비하지 않는다)
* void forEach(Consumer<? super T> action)          // 최종 연산 (스트림을 소비한다)

 

예시

* fileStream.map(File::getName)
*           .filter(s->s.indexOf('.') != 1)
*           .peek(s->System.out.printf("filename=%s\n", s))  // 파일명 출력
*           .map(s->s.substring(s.indexOf('.'))+1))
*           .peek(s->System.out.printf("extension=%s\n", s)) // 확장자를 출력
*           .forEach(System.out::print)

 

 

flatMap() : 스트림의 스트림을 스트림으로 변환

* Stream<String []> strArrstrm = Stream.of(new String[] {"abc", "def", "ghi"}, new String[] {"ABC", "GHI", "JKLMN"});
* Stream<Stream<String>> strStrStrm = strArrStrm.map(Arrays::stream);
* Stream<String> strStrStrm = strArrStrm.flatMap(Arrays::stream);  // 하나의 배열로 변환

 

예시

        Stream<String[]> strArrStrm = Stream.of(
          new String[] {"abc", "def", "jkl"},
          new String[] {"ABC", "GHI", "JKL"}
        );

//        Stream<Stream<String>> strStrmStrm = strArrStrm.map(Arrays::stream);
        Stream<String> strStrm = strArrStrm.flatMap(Arrays::stream);

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

        String[] lineArr = {
          "Believe or not It is true",
          "Do or do not There is no try",
        };

        Stream<String> lineStream = Arrays.stream(lineArr);
        lineStream.flatMap(line -> Stream.of(line.split(" +")))  // 하나 이상의 공백
                .map(String::toLowerCase)
                .distinct()
                .sorted()
                .forEach(System.out::println);

'Java > 공부' 카테고리의 다른 글

스트림의 최종연산  (0) 2024.12.11
자바 Optional  (0) 2024.12.11
자바 스트림의 중간연산(1)  (1) 2024.12.09
자바 스트림의 연산  (0) 2024.12.09
자바 스트림 만들기  (0) 2024.12.09