요약 : 스트림은 데이터를 추상화하고 모든 데이터를 공통적으로 컨트롤 할수 있게 하는 것입니다.
느낌이 오시나요? 물론 해보지 않고 뭔 멍소리야 하실수 있습니다.
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타입이여야합니다.
중간연산자나 최종연산자에는 람다식과 메소드 참조방식이 사용됩니다.
글을 보시고 이해 안되는 부분 궁금증 많이 남겨주시면 아는 선에서 알려드리고
모르는건 같이 고민하고 공부해겠습니다!
겁먹지 마시고 문의해주세요~!!
모르는건 창피한게 아니다. 모르는데 가만있는게 창피한것이다!
JAVA Thread 자바 스레드 part01 (2) | 2021.08.26 |
---|---|
java Stream 자바 스트림 공부 정리 part02 (2) | 2021.08.25 |
java design pattern Adapter 자바 디자인 패턴 어댑터 (1) | 2021.08.22 |
자바 디자인 패턴 Singleton pattern ( 싱글톤) (7) | 2021.08.20 |
자바 람다식 ( java lambda expression ) 정리하기 part01 (2) | 2021.08.19 |
댓글 영역