Today
-
Yesterday
-
Total
-
  • Stream_3: 중간 연산자
    Language/Java 2023. 11. 25. 00:01

    자르기 skip( ) , limit( )

    skip(long n)		// n개 건너뜀
    limit(long maxSize) // 최대 maxSize개 반환

    요소 걸러내기 filter( ) , distinct( )

    // 중복 요소 제거
    distinct() 	
    
    // 주어진 조건 p에 맞지 않는 요소 걸러냄
    // 리턴타입이 boolean인 람다식으로 사용 가능
    filter(Predicate<? super T> p)

    정렬 sorted( )

    sorted()
    sorted(Comparator<? super T> c) // comparator 대신 int 값을 반환하는 람다식을 사용하는것도 가능

    + Comparator 문자열 스트림 정렬 방법 소개

    Comparator.naturalOrder() // 기본 정렬
    Comparator.reverseOrder() // 기본 정렬의 역순
    
    String.CASE_INSENSITIVE_ORDER // 대소문자 구분 X
    String.CASE_INSENSITIVE_ORDER.reversed() // 대소문자 구분X 역순
    
    Comparator.comparing(String::length) // 길이 순 정렬
    Comparator.comparingint(String::length) // no 오토박싱 길이 순 정렬
    Comparator.comparing(String::length).reversed() // 길이 순 역순 정렬
    Comparator.comparing(String::length).thenComparing(Comparator<T> c) // 정렬 조건 추가

    변환 map( )

    스트림의 요소에 저장된 값 중에서 원하는 필드만 뽑아내거나 특정 형태로 변환해야 할 때 매개변수로 T 타입을 R 타입으로 변환해서 반환하는 함수를 지정해야 한다.

    Stream<R> map(Function<? super T, ? extends R> mapper)

    조회 peek( )

    연산과 연산 사이에 올바르게 처리되었는지 확인하고 싶을 때 사용 forEach와 다르게 스트림 요소를 소모하지 않음

    mapToInt( ) , mapToLong( ) , mapToDouble( )

    Stream<String> -> IntStream 변환할 때

    mapToInt(Integer::parseInt)

    Stream<Integer> -> IntStream 변환할 때

    mapToInt(Integer::intValue)

    count()만 지원하는 Stream<T> 메서드와 달리, IntStream 같은 기본형 스트림은 아래와 같이 숫자를 다루는데 편리한 최종 연산 메서드들을 제공한다.

    int 			sum() 		// 스트림의 모든 요소의 총 합
    OptionalDouble 	average() 	
    OptionalInt		max()		// 스트림의 요소 중 제일 큰 값
    OptionalInt		min()		// 스트림의 요소 중 제일 작은 값

    스트림의 요소가 하나도 없을 때, sum()은 0을 반환하지만, 다른 메서드들은 단순히 0을 반환할 수 없다. 그래서 나머지는 OptionalDouble, OptionalInt 자료형을 반환한다.

    중요한 점으로 이 메서드들은 최종 연산이기 때문에 호출 후 스트림을 닫아버린다.

    하나의 스트림에서 sum(), average() 등 여러 메서드를 한번에 호출할 수 없다.

    여러 메서드를 한번에 호출하려면 summaryStatistics()라는 메서드를 사용한다.

    // summaryStatistics() 사용 방법
    
    IntSummaryStatistics stat = scoreStream.summaryStatistics();
    
    long totCnt = stat.getCount();
    long totSum = stat.getSum();
    double avgScore = stat.getAverage();
    int minScore = stat.getMin();
    int maxScore = stat.getMax();

    flatMap( ) _ Stream<T[ ]>를 Stream<T>로 변환

    스트림의 요소가 배열이거나, map()의 연산 결과가 배열인 경우, 즉 스트림의 타입이 Stream<T[ ]>인 경우, Stream<T>로 다루는 것이 더 편리할 때가 있다. 그럴 떄는 map() 대신 flatMap()을 사용하면 된다.

    // ex
    
    Stream<String[]> strArrStrm = Stream.of(
    	new String[]{"abc", "asd", "sdf"},
    	new String[]{"ABC", "ASD", "FDS"}
    );
    
    // 위의 스트림을 Stream<String> 타입으로 변환
    Stream<String> strStream = strArrStrm.flatMap(Arrays::stream);

    'Language > Java' 카테고리의 다른 글

    Maven , Gradle  (0) 2023.11.28
    SQLite  (0) 2023.11.25
    Stream_2: 시작 연산자  (0) 2023.11.25
    Stream_1: 소개  (0) 2023.11.25
    자바의 정석 3판 _ 연습문제 02~03 오답 정리  (0) 2023.11.23

Designed by Tistory / Custom by 얼거스