상세 컨텐츠

본문 제목

Java Stream 자바 스트림 공부 정리

Language/JAVA

by Computer_x86_64 2021. 8. 24. 11:57

본문

java Stream 자바 스트림 공부 정리

java Stream 자바 스트림 공부 정리

요약 :  스트림은 데이터를 추상화하고 모든 데이터를 공통적으로 컨트롤 할수 있게 하는 것입니다.

 

느낌이 오시나요? 물론 해보지 않고 뭔 멍소리야 하실수 있습니다. 

 

Array를 사용할때 Arrays클래스를 사용합니다.

그리고 Collection을 사용할 때도 Collections 클래스를 사용합니다.

 

이렇게 특정 구조의 데이터를 동일한 방법으로 처리할수 있게 하는게 스트림입니다.

 

 

package blogTeest.Stream;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Stream {
	
	public static void main(String[] args) {
    //String 배열을 생성
		String[] strArr = { "b", "a", "d", "c"};
		//for문으로 출력
		for(String s : strArr) {
			System.out.println(s);
		}
		System.out.println();
        //Arrays.sort로 배열을 정렬
		Arrays.sort(strArr);
        //정렬된 내용 확인
		for(String s : strArr) {
			System.out.println(s);
		}
        //배열을 리스트에 담습니다.
		List<String> strlist = Arrays.asList(strArr);
		System.out.println(strlist);
		//Collections를 사용해 리스트의 내용을 역순으로 바꿉니다.
		Collections.reverse(strlist);
		System.out.println(strlist);

	}

}

 

위와 같이 데이터마다 다르게 처리를 해야합니다. 

 

그렇다면 Stream을 한번 확인해 봐야겠죠?

package blogTeest.Stream;

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

public class StreamTest {
	
	public static void main(String[] args) {
		String[] strArr = { "b", "a", "d", "c"};
		
		for(String s : strArr) {
			System.out.println(s);
		}
		System.out.println();
		Arrays.sort(strArr);
		for(String s : strArr) {
			System.out.println(s);
		}
		List<String> strlist = Arrays.asList(strArr);
		System.out.println(strlist);
		
		Collections.reverse(strlist);
		System.out.println(strlist);
		//여기부터 다른 코드입니다.
		Stream<String> stmStrArr =Arrays.stream(strArr);
		stmStrArr.sorted().forEach(System.out::print);  //abcd
		
		System.out.println();
		stmStrArr = strlist.stream();
		stmStrArr.filter((s)-> s == "c")
				.forEach(System.out::print);  //c

	}
}

제가 주석을 단 부분부터 스트림부분입니다. 

 

위코드는 신경안쓰셔도 됩니다.

 

변수타입을 Stream으로 하시고 제네릭 타입으로 String으로 합니다. 

그리고 앞에 Array > List 로 한 strlist를 Stream으로 변환하는 겁니다.

Array > List > Stream 

 

stmStr.sorted().forEach(System.out::print);   // abcd가 출력됩니다.

 

여기서 .sorted()는 중간연산자

.forEach()는 최종연산자입니다.

 

 

중간연산자는 몇번이고 여러개 사용가능하나

최종연산자를 사용하면 끝입니다. 

끝? 왜? 그럼 다시 사용하면 되겠군 !

 

아닙니다. Stream은 재사용 불가합니다. 한번 생성후 최종연산자를 사용하면 Stream은 빈껍데기 가 됩니다.

그래서 아래에는 list를 Stream으로 변환해 다시 stmStrArr에 다시 정의 한겁니다.

* Stream<String> 으로 선언했기때문에 재정의시에 String타입이여야합니다.

 

중간연산자나 최종연산자에는 람다식과 메소드 참조방식이 사용됩니다. 

 

글을 보시고 이해 안되는 부분 궁금증 많이 남겨주시면 아는 선에서 알려드리고 

모르는건 같이 고민하고 공부해겠습니다! 

겁먹지 마시고 문의해주세요~!!

 

모르는건 창피한게 아니다.  모르는데 가만있는게 창피한것이다! 

관련글 더보기

댓글 영역