(Java Stream Programming) 4. Mapping

soosoorim·2024년 2월 20일
0

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)
맵과 동일한 동작을 수행함.

  • map 과 flatMap의 차이
    반환 결과가 stream 일 경우, 차이가 발생함.
    map : 맵핑된 결과를 Stream 컬렉션에 넣어 반환 함. -> Stream<Stream>
    flatMap : 맵핑된 결과를 Stream으로 반환 함. -> Stream
    /**
     * 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);
    					
    
    	}
    
    }

0개의 댓글

관련 채용 정보