Published 2023. 4. 6. 16:26

스트림은 데이터 소스를 추상화 하고, 데이터를 다루는데 자주 사용되는 메소드들을 정의해 놓았다. 

컬렉션에 저장되어있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드 패턴. 
람다식과 함께 사용되어 컬렉션에 들어있는 데이터에 대한 처리를 매우 간결한 표현으로 작성할 수 있음

 

스트림 생성 

- 배열 스트림 

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
복사했습니다!