stream이란 무엇인가?

: 자바 8에서 추가된 기능으로 자바 컬렉션 데이터를 선언형으로 처리할 수 있도록한다.

사실 자바 컬렉션 데이터라고 했지만 배열과 같은 원시형 데이터 나열들도 스트림 처리를 할 수 있다. 이러한 스트림을 사용하면 좋은 점은 멀티스레드 코드를 사용하지 않고도 데이터를 투명하게 병렬도 처리할 수 있다는 점에서 굉장히 매력적이다.

스트림의 특징

  1. 선언형
  2. 조립가능
  3. 병렬화

이렇게 3가지로 줄일 수 있다.

솔직히 이와 관련해서 이야기 해야할 것이 많고 논쟁이 좀 있다. 스트림과 일반 반복문을 비교해서 생각해보자

List<Integer> list = List.of(1,2,3,4,5,6);

List<Integer> res1 = new ArrayList<>();
for(int i = 0; i<list.size(); i++){
	if(list.get(i)%2 == 0){
		res1.add(list.get(i));
	}
}

List<Integer> res2 = list.stream()
											.filter(num->num%2 == 0)
											.collect(Collectors.toList());

위 두개의 코드는 같은 기능을 한다. 하지만 반복문을 사용했을 때 는 코드가 지저분한 느낌이 들지만 스트림을 사용하면 한줄로 만들어 버릴 수 있다. 하지만 성능적인 측면에서는 반복문이 현재의 경우 훨씬 빠르게 동작할 것이다.

자세한 내용은 아래에 링크를 통해서 성능에 관해서 살펴보도록...

https://jypthemiracle.medium.com/java-stream-api는-왜-for-loop보다-느릴까-50dec4b9974b