map() - 스트림의 요소 변환하기
Stream<R> map(Function<? super T,? extends R> mapper) - Stream<T> Stream<R>
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); - 스트림의 모든 파일의 이름을 출력

File[] fileArr = { new File("Ex1.java"), new File("Ex1.bak"),
new File("Ex2.java"), new File("Ex1"), new File("Ex1.txt")
};
Stream<File> fileStream = Stream.of(fileArr);
// map()으로 Stream<File>을 Stream<String>으로 변환
Stream<String> filenameStream = fileStream.map(File::getName);
filenameStream.forEach(System.out::println); // 모든 파일의 이름을 출력
fileStream = Stream.of(fileArr); // 스트림을 다시 생성
fileStream.map(File::getName) // Stream<File> → Stream<String>
.filter(s -> s.indexOf('.')!=-1) // 확장자가 없는 것은 제외
.map(s -> s.substring(s.indexOf('.')+1)) // 확장자만 추출
.map(String::toUpperCase) // 모두 대문자로 변환
.distinct() // 중복 제거
.forEach(System.out::print); // JAVABAKTXT
System.out.println();
}
}
출력값
Ex1.java
Ex1.bak
Ex2.java
Ex1
Ex1.txt
JAVABAKTXT
peek() - 스트림의 요소를 소비하지 않고 엿보기 중간 중간 디버깅 용도로 사용
Stream<T> peek (Consumer<? super T> action) - 중간 연산이여서 스트림을 소비하지 않음
void forEach(Consumer<? super T> action) - 최종 연산이여서 스트림을 소비
.peek(s->System.out.printf("filename=%s%n", s))
.peek(s->System.out.printf("extension=%s%n", s))
출력값
filename=Ex1.java
extension=java
JAVAfilename=Ex1.bak
extension=bak
BAKfilename=Ex2.java
extension=java
filename=Ex1.txt
extension=txt
flatMap() - 스트림의 스트림을 스트림으로 변환
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();
결과값
abc
def
ghi
jkl
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(" +")))
//split은 String배열이 나오는데 공백 제거를함 +는 하나 이상의 공백 제거.
.map(String::toLowerCase)
.distinct()
.sorted()
.forEach(System.out::println);
System.out.println();
결과값
believe
do
is
it
no
not
or
there
true
try'하.. > java' 카테고리의 다른 글
| 스트림의 최종연산 (0) | 2021.12.26 |
|---|---|
| ch14 Optional<T> (0) | 2021.12.26 |
| ch14 스트림의 중간연산 (0) | 2021.12.26 |
| ch14 스트림의 연산 (0) | 2021.12.26 |
| ch14 스트림 만들기 (0) | 2021.12.26 |