ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java 8] Stream
    JAVA 2021. 8. 28. 14:07
    728x90

    스트림 (Stream) 

     

    1. 스트림이란'데이터의 흐름'
    2. Java 8 에서 추가된 스트림은 람다를 활용할 수 있는 기술
    3. Java 8 이전에는 배열 또는 컬렉션 인스턴스를 다루는 방법은 for 또는 foreach 문을 돌면서 요소 하나씩 꺼내서 다루는 방법을 사용
    4. 장점
      • 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있으며, 람다를 이용하여 코드 양을 줄일 수 있음
      • 병렬처리 (multh-threading) 가능하여 빠르게 처리 가능

     

    생성하기

    • 배열 스트림 : Arrays.stream 메소드
    • 컬렉션 스트림 : 컬렉션 타입 (Collection, List, Set) 인터페이스의 stream 메소드
    • Stream.builder() / Stream.generate() / Stream.iterate()
    • 기본 타입 (IntStream, LonngStream, DoubleStream) / String / 파일 스트림
    • 병렬 스트림 : paralleStream 메소드
    • 스트림 연결하기 : Stream.concat apthem

     

    가공하기 - intermediate operations

    • Stream<T> filter(Predicate<? super T> predicate) :  스트림 내 요소들을 하나씩 평가해서 걸러내는 작업
    Stream<String> stream = 
      names.stream()
      .filter(name -> name.contains("a"));
    // [Elena, Java]
    • <R> Stream<R> map(Function<? super T, ? extends R> mapper) : 스트림 내 요소들을 하나씩 특정 값으로 변환
    Stream<String> stream = 
      names.stream()
      .map(String::toUpperCase);
    // [ERIC, ELENA, JAVA]
    • Stream<T> sorted() / Stream<T> sorted(Coparator<? super T> comparator)
    • Stream<T> peek(Consumer<? super T> action) : 스트림 내 요소들 각각을 대상으로 특정 연산을 수행. Consumer를 인자로 받아, 각각에 특정 작업을 수행할 뿐 결과에 영향을 미치지 않음.

     

    결과 만들기 - terminal operations

    • Calculating : 스트림 API 는 다양한 종료작업 제공 (count(), sum(), min(), max(), average() 등)
    • Reduction : redouce 메소드
    • Collecting : collect 메소드로 Collector 타입의 인자를 받아 처리 (Collectors : toList, joining, averageingInt, summingInt, groupingBy 등 )
    • Matching : 조건식 람다 Predicate를 받아서 해당 조건을 만족하는 요소가 있는지 체크한 결과 리턴
    List<String> names = Arrays.asList("Eric", "Elena", "Java");
    
    boolean anyMatch = names.stream()
      .anyMatch(name -> name.contains("a")); // true
    boolean allMatch = names.stream()
      .allMatch(name -> name.length() > 3); // true
    boolean noneMatch = names.stream()
      .noneMatch(name -> name.endsWith("s"));  // true
    • forEach : 요소를 돌면서 실행되는 최종 작업. 중간작업의 peek 과 동일

     

     

     

     

    참고

     

     

     

     

     

    728x90
Designed by Tistory.