Java8의 Stream 생성 방법 및 예제

By JS | Last updated: June 25, 2018

Java8의 Stream 생성방법에 대해서 알아봅니다. Stream.of(), Stream.generate(), Stream.iterate() 등을 이용하여 Stream을 다루는 방법에 대해서 알아봅니다.

스트림 생성

Stream.of()로 생성하려는 객체를 입력하면, 스트림 객체로 생성이 됩니다. 출력은 forEach로 내부 순환을 하여 객체들을 출력합니다. args로 출력에 사용될 함수를 넘겨줍니다.

Stream<String> stream1 = Stream.of("code", "chacha", "blog", "example");
System.out.println("stream1");
stream1.forEach(s -> System.out.println(s));

결과

stream1
code
chacha
blog
example

Stream.empty()는 비어있는 스트림을 생성합니다.

Stream<String> stream2 = Stream.empty();
System.out.println("stream2");
stream2.forEach(s -> System.out.println(s));

결과

stream2

Stream.generate()는 Argument로 함수를 받습니다. 함수에서 리턴되는 객체가 스트림으로 생성됩니다. 함수는 무한히 호출되기 때문에 무한한 길이의 스트림이 생성됩니다. 그렇기 때문에 limit(5)로 5개의 객체만 생성되도록 하였습니다. 또한, System.out::println을 함수로 넣어주면 객체들을 출력해줍니다.

Stream<String> stream3 = Stream.generate(() -> "Echo").limit(5);
System.out.println("stream3");
stream3.forEach(System.out::println);

결과

stream3
Echo
Echo
Echo
Echo
Echo

Stream.generate()Math::random을 Args로 넘겨주면 랜덤 숫자로 이어진 스트림이 생성됩니다.

Stream<Double> stream4 = Stream.generate(Math::random).limit(5);
System.out.println("stream4");
stream4.forEach(System.out::println);

결과

stream4
0.9843243270075234
0.6037447042790027
0.9375820345272727
0.8864894191532746
0.44219174822200713

Stream.iterate()generate()와 유사합니다. 하지만 args로 두개를 받습니다. 첫번째는 초기값이고, 두번째는 함수입니다. 초기값을 함수에 대입하면 0, 2, 4, 8..로 무한한 스트림이 생성됩니다.

Stream<Integer> stream5 = Stream.iterate(0, n -> n + 2).limit(5);
System.out.println("stream5");
stream5.forEach(System.out::println);

결과

stream5
0
2
4
6
8

List로 생성된 객체도 스트림으로 생성가능합니다. list에 stream() 메소드를 List를 스트림으로 생성해줍니다.

List<String> list =
        Arrays.asList("a1", "a2", "b1", "b2", "c2", "c1");
Stream<String> stream6 = list.stream();
System.out.println("stream6");
stream6.forEach(System.out::println);

결과

stream6
a1
a2
b1
b2
c2
c1

Array객체도 스트림으로 생성가능합니다.

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

결과

stream7
a1
a2
b1
b2
c2
c1

코드

package stream;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StreamExample1 {
    public static void main(String args[]) {
        Stream<String> stream1 = Stream.of("code", "chacha", "blog", "example");
        System.out.println("stream1");
        stream1.forEach(s -> System.out.println(s));

        Stream<String> stream2 = Stream.empty();
        System.out.println("stream2");
        stream2.forEach(s -> System.out.println(s));

        Stream<String> stream3 = Stream.generate(() -> "Echo").limit(5);
        System.out.println("stream3");
        stream3.forEach(System.out::println);

        Stream<Double> stream4 = Stream.generate(Math::random).limit(5);
        System.out.println("stream4");
        stream4.forEach(System.out::println);

        Stream<Integer> stream5 = Stream.iterate(0, n -> n + 2).limit(5);
        System.out.println("stream5");
        stream5.forEach(System.out::println);

        List<String> list =
                Arrays.asList("a1", "a2", "b1", "b2", "c2", "c1");
        Stream<String> stream6 = list.stream();
        System.out.println("stream6");
        stream6.forEach(System.out::println);

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

    }
}
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha