[Java8] 스트림(Stream) 생성자

hyozkim·2020년 5월 7일
0

StreamAPI

목록 보기
2/4
post-thumbnail

스트림 생성

1. Array 스트림

String[] arr = new String[] {"a", "b", "c"};
Stream<String> arrayStream = Arrays.stream(arr);
Stream<String> arrayPartStream = Arrays.stream(arr,1,3);

2. Collection 스트림

List<String> list = Arrays.asList("a", "b", "c");
Stream<String> collectionStream = list.stream();
Stream<String> parallelStream = list.parallelStream();

3. 비어있는 스트림

null 대신 이용할 수 있다.

Stream emptyStream = Stream.empty();

4. build()

Stream<String> buildStream = Stream.<String>builder()
                	.add("a")
                	.add("b")
                	.build();

5. generate()

크기를 지정하지 않으면 무한하기 때문에 특정 사이즈만큼 생성하려면 반드시 limit을통해 최대 크기를 제한해야 한다.

Stream<String> generatedStream = Stream.generate(() -> "gen").limit(5);

6. iterate()

초기 값을 시작으로 해서 추가된 값을 생성한다.
generate()와 마찬가지로 크기를 지정하지 않으면 무한하기 때문에 limit을 통해 크기를 제한해야 한다.

Stream<String> iteratedStream = Stream.iterate("", s -> s+"a").limit(5);

7. of()

String[] strings = new String[] {"mad", "play","kim","hyoz"};
Stream<String> ofStream = Stream.of(strings);
long count = ofStream.filter(x -> x.contains("o")).count();

8. 기본 타입형 스트림

IntStream, LongStream, DoubleStream

제너릭을 사용하지 않고 기본 값을 생성하는 방법이다.
제너릭을 사용하지 않기 때문에 불필요한 오토 박싱(auto-boxing)이 발생하지 않는다.

  • range 는 (startPosition, endPosition) 범위를 가진다.
  • rangeClosed 는 [startPosition, endPosition] 범위를 가진다.
IntStream intStream = IntStream.range(1,5); // 1,2,3,4
LongStream longStream = LongStream.rangeClosed(1,5); // 1,2,4,5
Stream<Integer> boxedIntStream = IntStream.range(1,5).boxed(); 

boxed 메소드는 int, long, double 요소를 Integer, Long, Double 요소로 박싱해서 Stream을 생성한다.

DoubleStream doubles = new Random().doubles(3); // 난수 3개 생성

난수 스트림을 생성할 수도 있다.

9. 스트림 연결하기

Stream.concat 메소드를 이용해 두 개의 스트림을 연결해서 새로운 스트림을 만들어낼 수 있다.

Stream<String> stream1 = Stream.of("Java", "Scala", "Groovy");
Stream<String> stream2 = Stream.of("Python", "Go", "Swift");
Stream<String> concat = Stream.concat(stream1, stream2);
// [Java, Scala, Groovy, Python, Go, Swift]

10. 문자열 스트링

스트링에서 각 문자(char)을 IntStream으로 변환하여 만들 수 있다.

IntStream charsStream = "Stream".chars(); 
// [83, 116, 114, 101, 97, 109]

정규표현식(RegEx)을 이용해서 문자열을 자르고, 각 요소들로 스트림을 만들 수 있다.

Stream<String> stringStream = 
  Pattern.compile(", ").splitAsStream("Eric, Elena, Java");
  // [Eric, Elena, Java]
profile
차근차근 develog

0개의 댓글