스트림은 데이터 소스를 추상화 하고, 데이터를 다루는데 자주 사용되는 메소드들을 정의해 놓았다.
컬렉션에 저장되어있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드 패턴.
람다식과 함께 사용되어 컬렉션에 들어있는 데이터에 대한 처리를 매우 간결한 표현으로 작성할 수 있음
스트림 생성
- 배열 스트림
String[] arr = new String[]{"a", "b", "c"};
Stream<String> stream = Arrays.stream(arr);
Stream<String> streamOfArrayPart =
Arrays.stream(arr, 1, 3); // 1~2 요소 [b, c]
- 컬렉션 스트림 : 인터페이스에 추가된 디폴트 메소드 stream 을 이용해서 스트림을 만들 수 있습니다.
public interface Collection<E> extends Iterable<E> {
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
// ...
}
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
Stream<String> parallelStream = list.parallelStream(); // 병렬 처리 스트림
Stream.builder() : 스트림에 직접적으로 원하는 값을 넣을 수 있음
Stream<String> builderStream =
Stream.<String>builder()
.add("Eric").add("Elena").add("Java")
.build(); // [Eric, Elena, Java]
Stream.iterate(): 초기값과 해당값을 다루는 람다를 이용해서 스트림에 들어갈 요소를 만듦.
Stream<Integer> iteratedStream =
Stream.iterate(30, n -> n + 2).limit(5); // [30, 32, 34, 36, 38]
-> 30이 초기값이고 값이 2씩 증가하는 값들이 들어가게 됩니다. 즉 요소가 다음 요소의 인풋으로 들어갑니다. 이 방법도 스트림의 사이즈가 무한하기 때문에 특정 사이즈로 제한해야 합니다.
빈스트림 생성 :
Stream<String> stream = Stream.empty();
'JAVA' 카테고리의 다른 글
13.Collection_Map_Properties (0) | 2022.11.10 |
---|---|
13.Collection_Map_HashMap (0) | 2022.11.10 |
13.Collection_ Set_ HashSet (0) | 2022.11.10 |
13. Collection_ List_ArrayList 와 Generic (0) | 2022.11.09 |
13_ Collection _Collection과 List_ArrayList (0) | 2022.11.08 |