자바의 Stream

2024. 2. 29. 02:57Java

반응형

Stream 이란 무엇인가

Stream 은 Java 8 에서 추가된 API로, 객체를 순회하여 처리하는 다양한 로직을 제공한다.

Stream 의 사용처

  • 객체의 가공
  • 필터링, 매핑, 정렬 등

Stream 의 특징

  • Stream 은 데이터 구조가 아니라 데이터 구조를 입력으로 하는 API 이다.
  • Stream 은 원본 데이터 구조를 변화시키지 않고, 메서드들을 통해 결과를 반환받는다.
  • 각 중간 메서드들은 lazy 하게 동작하므로 연쇄적으로 메서드를 체이닝할 수 있다.

Stream 의 동작

Stream 의 동작 과정은 중간(Intermediate) 과정과 종결(Terminate) 과정이 있다.

중간 과정 (Intermediate Operation)

중간 과정은 여러 개의 메서드들이 체이닝되며 객체를 가공하는 과정이다.

주요 중간 과정 메서드

  • map() : 객체 내 데이터에 동일한 처리를 한다.

      List<Integer> integerList = List.of(1,2,3,4,5);
      // map()
      List<Integer> streamIntList = integerList.stream().map(x -> x*x).toList();
  • filter() : 특정 조건을 만족하는 요소만 선택한다.

      List<String> stringList = List.of("Reflection", "Collection", "Stream");
      // filter()
      List<String> streamStringList = stringList.stream().filter(s -> s.startsWith("S")).toList();
  • sorted() : 데이터를 정렬한다.

      List<String> stringList = List.of("Reflection", "Collection", "Stream");
    
      // sorted()
      List<String> sortedStringList = stringList.stream().sorted().toList();

종결 과정 (Terminal Operation)

종결 과정은 stream 을 거친 객체가 결과를 반환하는 과정이다.

주요 종결 과정 메서드

  • collect() : stream 의 결과값을 반환한다.

      List<Integer> integerList2 = List.of(2,4,2,5,4);
      // collect()
      Set<Integer> streamIntSet = integerList2.stream().collect(Collectors.toSet());
  • forEach() : stream 의 결과값을 순회한다.

      List<Integer> integerList = List.of(1,2,3,4,5);
      // forEach()
      integerList.stream().forEach(s -> System.out.println(s)); // 1 2 3 4 5
  • reduce() : stream 의 결과값을 하나의 값으로 반환한다.

      List<Integer> integerList = List.of(1,2,3,4,5);
      int odd = integerList.stream().filter(x -> x%2 != 0).reduce(0, (ans, i) -> ans + 1); // 3

References

반응형

'Java' 카테고리의 다른 글

자바의 Garbage Collection  (0) 2024.03.02
자바의 JVM  (0) 2024.03.01
자바의 제네릭 (Generic)  (1) 2024.02.28
자바의 네트워킹과 소켓 통신  (1) 2024.02.27
자바의 직렬화 (Serialization)  (0) 2024.02.22