String[] arr = new String[] {"a", "b", "c"};
Stream<String> arrayStream = Arrays.stream(arr);
Stream<String> arrayPartStream = Arrays.stream(arr,1,3);
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> collectionStream = list.stream();
Stream<String> parallelStream = list.parallelStream();
null 대신 이용할 수 있다.
Stream emptyStream = Stream.empty();
Stream<String> buildStream = Stream.<String>builder()
.add("a")
.add("b")
.build();
크기를 지정하지 않으면 무한하기 때문에 특정 사이즈만큼 생성하려면 반드시 limit을통해 최대 크기를 제한해야 한다.
Stream<String> generatedStream = Stream.generate(() -> "gen").limit(5);
초기 값을 시작으로 해서 추가된 값을 생성한다.
generate()와 마찬가지로 크기를 지정하지 않으면 무한하기 때문에 limit을 통해 크기를 제한해야 한다.
Stream<String> iteratedStream = Stream.iterate("", s -> s+"a").limit(5);
String[] strings = new String[] {"mad", "play","kim","hyoz"};
Stream<String> ofStream = Stream.of(strings);
long count = ofStream.filter(x -> x.contains("o")).count();
IntStream, LongStream, DoubleStream
제너릭을 사용하지 않고 기본 값을 생성하는 방법이다.
제너릭을 사용하지 않기 때문에 불필요한 오토 박싱(auto-boxing)이 발생하지 않는다.
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개 생성
난수 스트림을 생성할 수도 있다.
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]
스트링에서 각 문자(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]