프로그래밍 언어/Java

[java] Stream 개념 공부

happy_life 2022. 3. 8. 23:24

Stream 

  • 자바 8에서 추가된 스트림은 람다를 활용할 수 있는 기술 중의 하나.
  • 스트림은 데이터의 흐름
  • 자바에서 제공하는 Collection 인터페이스에는 stream() 메소드가 정의되어있고, 이를 구현한 List 와 Set 등의 컬렉션 에서도 stream 메소드를 사용할 수 있다.

 

Stream 특징

1. Stream 은 데이터를 변경하지 않는다.

 - 원본데이터로부터 데이터를 읽기만 할 뿐, 원본 데이터 자체를 변경하진 않음

 

2. Stream은 일회용이다.

 -Stream은 한번 사용하면 닫혀서 재사용이 불가능하다.

 

3. Stream은 작업을 내부 반복으로 처리한다.

 -Stream을 이용한 작업이 간결한 이유는 바로 내부 반복이다. 즉, 반복문이 코드 상 노출되지 않는다.

 

코드 예제

ArrayList<Integer> list = new ArrayList<Integer>();

 

list.add(4);

list.add(2);

list.add(3);

list.add(1);

 

// 컬렉션에서 스트림 생성

Stream<Integer> stream = list.stream();

// forEach() 메소드를 이용한 스트림 요소의 순차 접근

stream.forEach(System.out::println);

스트림의 중개 연산

 

ex)Filtering

-Stream 에서 조건에 맞는 데이터만을 정제하여 더 작은 컬렉션을 만드는 연산.

IntStream stream2 = IntStream.of(7, 5, 5, 2, 1, 2, 3, 5, 4, 6);

 

// 스트림에서 홀수만을 골라냄.

stream2.filter(n -> n % 2 != 0).forEach(e -> System.out.print(e + " "));

 

실행결과

7 5 5 1 3 5

스트림의 최종 연산

 

중개 연산을 통해 변환된 스트림은 마지막으로 최종 연산을 통해 필터링된다.

종류

1. 요소의 출력 : forEach()

2. 요소의 소모 : reduce()

3. 요소의 검색 : findFirst(), findAny()

4. 요소의 검사 : anyMatch(), allMatch(), noneMatch()

5. 요소의 통계 : count(), min(), max()

6. 요소의 연산 : sum(), average()

7. 요소의 수집 : collect()

 

 

ex)forEach()

코드예제

Stream<String> stream = Stream.of("넷", "둘", "셋", "하나");

stream.forEach(System.out::println);

실행결과

넷
둘
셋
하나