Stream 특징
- Stream은 lambda를 활용할 수있는 기술중 하나.
- 배열과 컬렉션을 함수형으로 처리.
Stream 사용 장점
1. 간결한 코드 표현이 가능.
기존에는 for 또는 forEach문을 돌면서 요소를 하나씩꺼내어 처리하는 방식을 하였다.
이러한 방식에 문제점은 로직이 복잡해질수록 코드양이 많아져 여러로직이 섞이게 됩니다.
이런 문제점을 해결하기위한 stream은
배열과 컬렉션을 함수형으로 처리함으로써 코드양을 줄이고 간결하게 표현이 가능합니다.
배열 또는 컬렉션을 stream 활용하면, 필터링하고 가공된결과를 간결하게 표현이 가능.
2. 병렬처리가 가능하여 요소들을 빠르게 처리가능.
하나의 장점은 간단하게 병렬처리(multi-threading)가 가능하다는 점입니다.
하나의 작업을 둘 이상의 작업으로 잘게 나눠서 동시에 진행하는 것을 병렬 처리(parallel processing)라고 합니다.
즉 쓰레드를 이용해 많은 요소들을 빠르게 처리할 수 있습니다.
Stream 사용
스트림 단계 | 종류 | 설명 | 사용 |
생성하기 | 배열스트림 | 배열 관련 스트림 |
String[] arr = new String(){"a","b","c"}; Arrays.stream(arr) |
컬렉션스트림 |
컬렉션(list,set, collections) 관련 스트림 |
List<String> list = new ArrayList(); |
|
빈 스트림 | 요소가 존재하지않을 때, null 대신사용가능. | Stream.empty(); | |
Stream.builder() | 요소를 직접 넣음. | Stream.<String>builder() .add("Eric").add("Elena").add("Java") .build(); // [Eric, Elena, Java] |
|
Stream.generate() | |||
Stream.iterate() | |||
기본타입형 스트림 | |||
문자열 스트링 | |||
파일 스트림 | |||
병렬 스트림 |
Arrays.stream(arr).parallel(); //배열 병렬처리 list.parallelStream(); //list 병렬처리 |
||
스트림 연결 | Stream<String> stream1 = Stream.of("Java", "Scala", "Groovy"); Stream<String> stream2 = Stream.of("Python", "Go", "Swift"); Stream<String> concat = Stream.concat(stream1, stream2); |
||
가공하기 | Filtering | 요소들을 하나씩 평가하여 걸러내는 작업. | names.stream() .filter(name -> name.contains("a")); |
Mapping | 요소들을 하나씩 특정값으로 변환. | names.stream() .map(String::toUpperCase); |
|
Sorting | 요소를 정렬하는 작업. | lang.stream() .sorted((s1, s2) -> s2.length() - s1.length()) .collect(Collectors.toList()); |
|
Iterating | |||
결과만들기 | Calculating | ||
Reduction | |||
Collecting | |||
Matching | |||
Iterating |
'language > java' 카테고리의 다른 글
Jar 파일 수정하기 (0) | 2020.01.02 |
---|---|
공통객체를 서비스에 따라 사용하려면 (0) | 2020.01.02 |
Wapper 클래스 (0) | 2019.12.17 |
Static 변수 / 메서드 (0) | 2019.11.28 |
HttpURLConnection vs HttpsURLConnection (0) | 2019.11.27 |