본문 바로가기
Spec UP - Backend/나도코딩의 자바기본편

chap_10. Stream

by TIS_Ha 2023. 7. 6.
반응형

Stream의 문자 그대로의 뜻은 개울, 시내, 흐르다 라는 의미를 가진다.

Java에서 스트림은 '데이터가 흐른다' 라는 의미로 볼 수 있으며

Java에서 스트림을 이용하면 많은 데이터 중 필터링 된 데이터, 요소를 추출할 수 있다.

 

스트림은 위와같이 Arrays.stream() , Collection.stream() , Stream.of() 등의 형태로 생성할 수 있다.

 

스트림 사용은 중간연산(Intermediate Operation)과 최종연산(Terminal Operation)이 있다.

중간연산은 중간에 필터링 등의 여러 작업을 진행한다. (filter, map, sorted, distinct, skip)

최종연산은 일련의 작업을 통해 최종적인 결과물로 한번만 사용한다.(count, min, max, sum, forEach, anyMatch, allMatch)


아래 예제들을 통해 스트림 사용 방법을 학습해보자.

Arrays.stream(scores).filter(x -> x >= 90 ).forEach(x -> System.out.println(x));

Arrays.stream(scores) 에서 90점 이상인 scores 만 필터링(filter) 후

forEach문을 통해 필터링된 데이터를 출력하도록 하였다.

동일한 동작을 아래와 같이 작성할 수도 있다.(아래 구문을 실행하여도 90점 이상인 데이터가 출력된다)

Arrays.stream(scores).filter(x -> x >= 90 ).forEach(System.out::println);

↑ 스트림을 통해 필터링 된 데이터의 수를 카운트하는 예제.

 

↑ 스트림을 통해 필터링 된 데이터의 합을 계산하는 예제.

↑ 스트림을 통해 필터링 된 데이터를 정렬 후 출력하는 예제.


문자열 데이터를 스트림으로 사용하는 예제를 학습해보자.

Arrays.stream(langs).filter(x->x.startWith("C"); 은 "C"로 시작하는 데이터를 필터링할 때 사용

Arrays.stream(langs).filter(x->x.startWith("C"); 은 "C"라는 글자를 포함하는 데이터를 필터링 할 때 사용

Arrays.stream(langs).filter(x->x.length()<=4); 은 글자수가 4 이하인 데이터를 필터링 할 때 사용

.sorted() 은 스트림 데이터를 정렬할 때 사용

.anyMatch(x->x.contains("C"); 은 "C"를 포함하고 있는 데이터가 존재하는지 확인할 때 사용

.allMatch(x->x.contains("C"); 은 모든 데이터가 "C"를 포함하고있는지 여부를 확인할 때 사용

.map을 이용해 데이터를 변경할 수 있고 .collect(Collectors.toList())를 통해 데이터를 List로 받아올 수 있다.

반응형

댓글