자바의 정석 - 스트림 (3)

송용준·2023년 6월 8일

스트림의 연산 - 중간연산

스트림의 연산 - 최종연산

스트림의 중간연산 (1/7)

  • 스트림 자르기 - skip(), limit()
    skip : 앞에서부터 n개 건너뛰기
    limit : maxSize 이후의 요소는 잘라냄

스트림의 중간연산 (2/7)

  • 스트림의 요소 걸러내기 - filter(), distinct()
    filter : 조건에 맞지 않는 요소 제거
    distinct : 중복제거

스트림의 중간연산 (3/7)

  • 스트림 정렬하기 - sorted()

스트림의 중간연산 (4/7)

  • comparator의 comparing()으로 정렬 기준을 제공
studentStream.sorted(Comparator.comparing Student::getBan))
			 .forEach(System.out::println); 
  • 추가 정렬 기준을 제공할 때는 theComparing()을 사용

스트림의 중간연산 (5/7)

  • 스트림의 요소 변환하기 - map()
import java.io.*;
import java.util.stream.Stream;

class Java {
	public static void main(String[] args)  {	
		File[] fileArr = {new File("EX1.java"), new File("EX1.bak"),
				new File("EX2.java"), new File("EX2.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::println);						// JAVABAKTXT
		
		System.out.println();
	}
}

스트림의 중간연산 (6/7)

  • 스트림의 요소를 소비하지 않고 엿보기 - peek()
    중간중간 디버깅용도

스트림의 중간연산 (7/7)

  • 스트림의 스트림을 스트림으로 변환 - flatMap()
profile
용용

0개의 댓글