Java - Stream 생성 방법 및 예제

Stream 객체의 다양한 생성 방법 및 예제에 대해서 알아보겠습니다.

1. Stream.of()로 Stream 생성

특정 객체를 요소로 갖는 Stream을 생성하고 싶을 때 Stream.of()를 사용할 수 있습니다.

아래 예제와 같이, Stream.of()의 인자로 요소들을 입력하면, 이 요소들을 전달하는 Stream 객체가 생성됩니다. Stream.forEach()로 입력한 객체가 Stream에서 전달되는지 확인할 수 있습니다.

Stream<String> stream = Stream.of("code", "chacha", "blog", "example");

stream.forEach(s -> System.out.println(s));

Output:

code
chacha
blog
example

2. Stream.empty()로 비어있는 Stream 생성

Stream.empty()는 어떤 요소도 갖고 있지 않는 Stream 객체를 생성합니다. 즉, 비어있는 스트림을 생성합니다. Stream.forEach()로 Stream에서 전달되는 요소를 출력해보면 아무것도 출력되지 않습니다.

Stream<String> stream = Stream.empty();

stream.forEach(s -> System.out.println(s));

Output:

3. List.stream()으로 Stream 생성

List.stream()는 List의 요소들을 갖고 있는 Stream을 생성합니다.

List<String> list =
        Arrays.asList("a1", "a2", "b1", "b2", "c2", "c1");
Stream<String> stream = list.stream();

stream.forEach(System.out::println);

Output:

a1
a2
b1
b2
c2
c1

4. Arrays.stream()으로 Stream 생성

배열도 아래와 같이 Arrays.stream()을 이용하여 Stream을 생성할 수 있습니다.

String[] array = new String[]{"a1", "a2", "b1", "b2", "c2", "c1"};
Stream<String> stream = Arrays.stream(array);

stream.forEach(System.out::println);

Output:

a1
a2
b1
b2
c2
c1

5. Stream.generate()로 Stream 생성

Stream.generate()는 인자로 함수를 받고, 이 함수가 리턴하는 객체들을 요소로 갖는 Stream을 생성합니다. 이 함수는 인자를 받지 않고 리턴 값이 있는 함수입니다.

아래 예제에서 Stream은 () -> "Echo" 함수를 무한히 실행하여 "Echo" 문자열을 전달하기 때문에, limit(5)로 5개의 객체만 전달되도록 제한하였습니다.

Stream<String> stream = Stream.generate(() -> "Echo").limit(5);

stream.forEach(System.out::println);

Output:

Echo
Echo
Echo
Echo
Echo

5.1 Math를 사용한 예제

Stream.generate()Math::random을 인자로 전달하면, 랜덤 숫자로 이어진 스트림이 생성됩니다.

Stream<Double> stream = Stream.generate(Math::random).limit(5);

stream.forEach(System.out::println);

Output:

0.9843243270075234
0.6037447042790027
0.9375820345272727
0.8864894191532746
0.44219174822200713

6. Stream.iterate()로 Stream 생성

Stream.iterate()generate()와 유사합니다. 하지만 두개의 인자를 받습니다. 첫번째 인자는 초기값, 두번째 인자는 함수입니다. 이 함수는 1개의 인자를 받고 리턴 값이 있습니다.

아래 예제에서 초기값을 함수에 대입하면 0, 2, 4, 8..로 무한한 스트림이 생성됩니다.

Stream<Integer> stream = Stream.iterate(0, n -> n + 2).limit(5);

stream.forEach(System.out::println);

Output:

0
2
4
6
8
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha