개발일지/Java

Java 스트림 생성, 중간 연산, 최종 연산

2022. 9. 20. 12:02
목차
  1. 스트림 생성
  2. 중간 연산
  3. 최종 연산
728x90

스트림 생성

스트림 사용 시 주의할 점

  • 데이터 소스로부터 데이터를 읽기만 하고 변경은 하지 않는다
  • 스트림은 일회용이다. -> 한번 사용 시 닫히므로 필요시 다시 만들어야 됨

 

Collection 인터페이스에는 stream()이 정의되어 있다

-> Collection을 구현한 객체들(List, Set 등)은 모두 stream()을 이용해 스트림을 생성할 수 있다

.stream()

// List로부터 스트림을 생성
List<String> list = Arrays.asList("a", "b", "c"); // List생성
Stream<String> listStream = list.stream(); // List로 Stream을 생성
listStream.forEach(System.out::prinln); //스트림의 모든 요소를 출력.

 

배열

Arrays.stream()

Stream<String> stream = Stream.of("a", "b", "c");
Stream<String> stream = Stream.of(new String[] {"a", "b", "c"});
Stream<String> stream = Arrays.stream(new String[] {"a", "b", "c"});
Stream<String> stream = Arrays.stream(new String[] {"a", "b", "c"}, 0, 3);

 

원시 자료형 (int, long, double)

특수한 종류의 Stream들도 사용 가능 (IntStream, LongStream, DoubleStream)

 

리턴 타입 메서드(매개 변수) 소스
Stream, IntStream,
LongStream, DoubleStream
Arrays.stream(T[]), Arrays.stream(int[]), Arrays.stream(long[]), Arrays.stream(double[]), Stream.of(T[]), IntStream.of(int[]) LongStream.of(long[]), DoubleStream.of(double[]) 배열
IntStream IntStream.range(int, int), IntStream.rangeClosed(int, int) int 범위
LongStream LongStream.range(long, long), LongStream.rangeClosed(long, long) long 범위
Stream java.util.Collection.Stream(), java.util.Collection.parallelSream( ) 컬렉션

 

IntStream의 경우 range() 이용 가능

// 4이상 10미만의 숫자를 갖는 IntStream
IntStream stream = IntStream.range(4, 10);

중간 연산

중간 연산은 연산 결과를 스트림으로 반환하기 때문에, 연속해서 여러 번 수행 가능

메서드 설명
filter() 조건에 맞는 데이터만을 정제해여 더 작은 컬렉션을 만들어준다.
distinct() 중복 요소 제거
map() 기존의 Stream 요소들을 대체하는 요소로 구성된 새로운 Stream을 형성(인자로 함수형 인터페이스 function을 받는다)
sorted() 정렬 (인자x = 오름차순, Comparator.reverseOrder() = 내림차순)
peek() 요소를 하나씩 돌면서 출력 (스트림을 소모하지 않음) -> 주로 연산 중간에 결과를 확인하기 위해 사용

최종 연산

최종 연산은 연산 결과가 스트림이 아니기 때문에, 한 번만 연산이 가능하다

메서드 설명
forEach() 연산 결과 확인
allMatch() 모든 요소가 조건을 만족할 경우 true
anyMatch() 하나 이상의 요소가 조건을 만족할 경우 true
noneMatch() 모든 요소가 조건을 만족하지 못할 경우 true
sum() 전체 요소의 합
count() 전체 요소의 개수
average() 전체 요소의 평균값
max() 최대값
min() 최소값
findFirst() 배열의 첫번째 요소
reduce() 누적하여 하나로 응축(reduce)하는 방식으로 동작. 앞의 두 요소의 연산결과를 바탕으로 다음 요소와 연산한다
collect() List나 Set, Map 등 다른 종류의 결과로 수집하고 싶은 경우

reduce() 예시

int[] intArr = {1, 2, 3, 4, 5};

long example1 = Arrays.stream(intArr).sum();
System.out.println("intArr의 전체 요소 합 " + example1);

int example2 = Arrays.stream(intArr)
        .reduce((a, b) -> a - b)
        .getAsInt();
System.out.println("초기값 없는 reduce " + example2);

int example3 = Arrays.stream(intArr)
        .reduce(10, (a, b) -> a - b);
System.out.println("초기값 존재하는 reduce " + example3);
728x90
저작자표시 비영리 변경금지 (새창열림)

'개발일지 > Java' 카테고리의 다른 글

Java InputStream, OutputStream  (0) 2022.09.24
Java Optional<T>  (0) 2022.09.24
Java 스트림(Stream)  (0) 2022.09.19
Java 람다식 (Lambda Expression  (0) 2022.09.19
Java 애너테이션 (Annotation)  (0) 2022.09.19
  1. 스트림 생성
  2. 중간 연산
  3. 최종 연산
'개발일지/Java' 카테고리의 다른 글
  • Java InputStream, OutputStream
  • Java Optional<T>
  • Java 스트림(Stream)
  • Java 람다식 (Lambda Expression
E-room
E-room
나의 성취 기록들
E-room
E-room Achievement Logs
E-room
전체
오늘
어제
  • 분류 전체보기
    • 개발일지
      • 돌픽
      • Spring
      • Algorithm
      • Java
      • Node.js
      • Python
      • DataBase
      • 웹개발
      • JavaScript
      • 컴퓨터지식
      • Django
    • 이것저것
    • 피드백 감사히 받겠습니다

블로그 메뉴

  • 태그
  • Github
  • 돌픽-이상형월드컵

인기 글

최근 글

최근 댓글

태그

  • API
  • 탐색
  • 생활코딩
  • JPA
  • mysql
  • python
  • 재귀
  • Java
  • 순열
  • 알고리즘
  • 백준
  • 파이썬
  • 다이나믹
  • Spring
  • 자료구조
  • algorithm
  • 백트래킹
  • 자바
  • 스파르타코딩클럽
  • 수열
  • 프로그래밍
  • dfs
  • boot
  • search
  • SQL
  • javascript
  • dp
  • Django
  • 조합
  • 완전탐색

공지사항

hELLO · Designed By 정상우.
E-room
Java 스트림 생성, 중간 연산, 최종 연산
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.