본문 바로가기

언어/Java

스트림

※ 스트림이란?

Java 8부터는 컬렉션 및 배열의 요소를 반복 처리하기 위해 for문이나 Iterator(반복자) 대신 스트림(Stream)을 사용할 수 있다.

스트림 요소 처리 : 반복문 , 입출력 스트림과는 다름

package ch17.sec01.exam01;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.stream.Stream;

public class StreamExample {
	public static void main(String[] args) {
		//Set 컬렉션 생성
		Set<String> set = new HashSet< >();
		set.add("홍길동");
		set.add("신용권");
		set.add("감자바");

		//Stream을 이용한 요소 반복 처리
		Stream<String> stream = set.stream();
		stream.forEach( name -> System.out.println(name) );
	}
}

※ forEach 수정한거 람다식
for(String name : set) {
    sop (name);
}

 

※ 내부 반복자

for문과 Iterator는 컬렉션의 요소를 컬렉션 바깥쪽으로 반복해서 가져와 처리하는데, 이것을 외부 반복자라고 한다.

반면, 스트림은 요소 처리 방법을 컬렉션 내부로 주입시켜서 요소를 반복 처리하는데, 이것을 내부 반복자라고 한다. 

for문안돌려도 알아서 순차처리됨. 병렬처리해서 퍼포먼스 빨라진다

 

※ 스트림 파이프라인

컬렉션의 오리지널 스트림 뒤에 필러링 중간 스트림이 연결될 수 있고, 그 뒤에 중간 스트림이 연결될 수 있는 등 스트림은 하나 이상 연결될 수 있다. 스트림이 연결되어 있는 것을 스트림 파이프라인이라고 한다.

 

Student 객체를 요소로 가지는 컬렉션에서 Strudent 스트림을 얻고, 중간 처리를 통해 score 스트림으로 변환한 후 최종 집계 처리로 score 평균을 구하는 과정

//Student 스트림
Stream<Student> studentStream = list.stream();
//scrore 스트림
IntStream scoreStream = studentStream.mapToInt(student -> student.getScore() );
				// Student 객체를 getScore() 메소드의 리턴값으로 매핑
//평균 계산
double avg = scoreStream.average().getAsDouble();

for(Student student : list) {
    int score = student.getScore();
    sum += score;

반환값이 intstream
-> mapToInt(student -> studentScore()).average() );
IntStream is2 = is.average();

 

스트림 파이프라인으로 구성할 때 주의할 점은 파이프라인의 맨 끝에는 반드시 최종 처리 부분이 있어야 한다.

 

※ 요소 걸러내기(필터링)

필터링 메소드에는 distinct() 와 filter()가 있다.

 distinct() : 요소의 중복을 제거

 filter() : 메개값으로 주어진 Predicate가 true를 리턴하는 요소만 필터링

filter(Predicate<T>), filter(IntPredicate), filter(LongPredicate), filter(DoublePredicate)

 

※ 요소를 복수 개의 요소로 변환

flatMapXxx() 메소드는 하나의 요소를 복수 개의 요소들로 변환한 새로운 스트림을 리턴한다.

 

※ 요소 정렬

요소 정렬의 기본은 오름차순이다.

 

※ List Collection Map 기본자료형 저장 불가능

'언어 > Java' 카테고리의 다른 글

네트워크 예제 4  (0) 2023.08.20
서버 멀티 스레드  (0) 2023.08.16
네트워크 예제 2  (0) 2023.08.16
네트워크 예제 1  (0) 2023.08.16
네트워크  (0) 2023.08.16