Mapping
맵핑이란?
필터링이 SQL의 WHERE와 같다면, 맵핑은 SELECT 컬럼과 같음. ( 단, 하나의 요소만 맵핑할 수 있다. )
원본 스트림을 변환하고자 할 때 사용.
스트림의 원하는 요소만 추출해 새로운 스트림으로 생성함.
public static void main(String[] args) {
List<String> words = Arrays.asList("Java8", "Lambdas", "In", "Action");
words.stream() // Stream<String>
.map((String str) -> str.length()) // Stream<Integer>
.forEach ((Integer length) -> System.out.println(length));
}
flatMap (거의 사용x)
맵과 동일한 동작을 수행함.
/**
* Stream.map 내부에서 새로운 Stream을 반환할 때, 사용
*/
public class FlatMapExample {
public static void main(String[] args) {
// word.txt 파일 읽어서 List로 변환하기
File file = new File("C:\\Java Exam", "word.txt");
List<String> wordList = null;
try {
wordList = Files.readAllLines(file.toPath(), Charset.forName("UTF-8"));
} catch (IOException e) {
e.printStackTrace();
}
// System.out.println(wordList);
// for (String line : wordList) {
// String[] letterArray = line.split("");
// for(String letter : letterArray) {
// System.out.println(letter);
// }
// }
String joinedLetter = wordList.stream() // Stream<String>
.peek(line -> System.out.println("Line: " + line)) // 스트림이 어떻게 흘러가나 볼 수 있는 것
.map( line -> line.split("")) // Stream<String[]>
// .peek(letterArray -> {
// System.out.println("Array: " + letterArray);
// for (String letter : letterArray) {
// System.out.println("Letter: " + letter);
// }
// })
// map 내부에서 stream을 반환시키는 중일 때
// flatMap을 사용하게 되면
// 반환된 Stream이 원본 Stream을 대체한다.
.flatMap(letterArray -> Arrays.stream(letterArray))
// .peek(letter -> System.out.println("Peek: " + letter))
.distinct() // 중복 제거
// .forEach(letter -> System.out.println("> " + letter));
.collect(Collectors.joining()); // 한 글자씩 떨어진 글자들을 하나의 스트링으로 모아준다.
System.out.println(joinedLetter);
}
}