자료의 대상과 관계없이 동일한 연산을 수행할 수 있는 기능 

배열, 컬렉션에 동일한 연산이 수행되어 일관성 있는 처리 가능

한번 생성하고 사용한 스트림은 재사용할 수 없음

스트림 연산은 기존 자료를 변경하지 않음

중간 연산과 최종 연산으로 구분됨

최종 연산이 수행 되어야 모든 연산이 적용되는 지연 연산 

 

stream은 인터페이스의 일종으로 

Interface Stream<T>

docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

 

Stream (Java Platform SE 8 )

A sequence of elements supporting sequential and parallel aggregate operations. The following example illustrates an aggregate operation using Stream and IntStream: int sum = widgets.stream() .filter(w -> w.getColor() == RED) .mapToInt(w -> w.getWeight())

docs.oracle.com

람다식처럼 사용하며 여러가지 메서드를 가지고 있습니다. 

예를들어 

sum(); ->매개변수들의 합

count();->매개변수들의 갯수

forEach(); -> 매개변수들의 forloop?

일단 for문이랑 foreach랑은 차이가 있는데 일단 이부분은 나중에 설명하도록 하겠습니다.

먼저 기능들은 확인해보겠습니다.

package Test01;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class Main {

  
	public static void main(String [] args)  {
	 
		int []arr= {1,2,3,4,5};
		
		int sum=Arrays.stream(arr).sum();
		int count=(int) Arrays.stream(arr).count();
		
		System.out.println("합:"+sum);
		System.out.println("갯수:"+count);
		System.out.println("--------------------------------------");
		System.out.println("--------------데이터 나열----------------");
		List<String> sList=new ArrayList<String>();
		sList.add("Toms");
		sList.add("EdWard");
		sList.add("Jack");
		
		Stream<String> stream=sList.stream();
		
		
		//이전에 람다식과 같은 구조 (매개변수 )->리턴값 (조건 및 결과) 
		//forEach(s->System.out.println(s+""))
		stream.forEach(s->System.out.println(s+""));
		System.out.println();
		sList.stream().sorted().forEach(s->System.out.println(s+""));
	}
}

사용 방법은 위의 코드와 같습니다.

int []arr= {1,2,3,4,5};
		
int sum=Arrays.stream(arr).sum();//배열의 합
int count=(int) Arrays.stream(arr).count();//배열의 갯수 
		

  stream인터페이스의 메서드를 불러와서 사용해줍니다.

List<String> sList=new ArrayList<String>();
sList.add("Toms");
sList.add("EdWard");
sList.add("Jack");
		
Stream<String> stream=sList.stream();
		
		
//이전에 람다식과 같은 구조 (매개변수 )->리턴값 (조건 및 결과) 
//forEach(s->System.out.println(s+""))
stream.forEach(s->System.out.println(s+""));//loop 출력

  List로 String 값들을 저장후 

 foreach문을 이용하여 Loop문 처럼 출력합니다. 

기본 문법은 람다식과 동일합니다. 

ps. 람다식이 확실히 다른사람들이 보면 어려울것 같다는 느낌이 자꾸 듭니다. 직관적이지 않아서 그런것같습니다.

    코드 자체는 간결해서 좋은것 같습니다. 

 

리스트에 있는 string 값 정렬 출력 

sList.stream().sorted().forEach(s->System.out.println(s+""));

    결과:

'프로그래밍언어 > JAVA' 카테고리의 다른 글

<JAVA>예외처리-1  (0) 2020.12.11
<JAVA>Stream -2  (0) 2020.12.11
<JAVA>람다식  (0) 2020.12.09
<JAVA> 익명 내부 클래스  (0) 2020.12.09
<JAVA>내부 클래스  (0) 2020.12.08

+ Recent posts