김찬진의 개발 블로그
[23/07/23] Stream, flatMap 본문
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