- ๋ค์ํ ๋ฐ์ดํฐ ์์ค(์ปฌ๋ ์ , ๋ฐฐ์ด ๋ฑ)๋ฅผ ํ์คํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํ ๊ฒ (Like Iterator)
- ์ผ๋จ Stream์ผ๋ก ๋ง๋ค๊ณ ๋๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ ์์ค์ ๊ฐ์ ๋ฐฉ์์ผ๋ก(์ผ๊ด์ ์ผ๋ก) ๋ก์ง์ ์ ์ฉํ ์ ์๋ค.
- ์ค๊ฐ ์ฐ์ฐ
- ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ Stream์ธ ์ฐ์ฐ
- ์ฌ๋ฌ ๋ฒ ์ ์ฉ ๊ฐ๋ฅ
- ์ต์ข
์ฐ์ฐ
- ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ Stream์ด ์๋ ์ฐ์ฐ
- void์ด๊ฑฐ๋, List๋ฅผ ๋ฐํํ๊ฑฐ๋ ๋ฑ๋ฑ
- โญ Stream์ ์์๋ฅผ
์๋นํ๊ธฐ ๋๋ฌธ์, ๋จ ํ ๋ฒ๋ง ์ ์ฉ ๊ฐ๋ฅ- Like Iterator
- ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ Stream์ด ์๋ ์ฐ์ฐ
-
์๋ณธ์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐํ (read-only)
-
Stream ์์ฒด๋ ์ต์ข ์ฐ์ฐ์ ์ํด ๋ณ๋ ๊ฐ๋ฅ
- Iterator์ฒ๋ผ ๋์
-
์ต์ข ์ฐ์ฐ ์ ๊น์ง ์ค๊ฐ ์ฐ์ฐ์ด ์ํ๋์ง ์์
-
๋ฉํฐ์ฐ๋ ๋๋ฅผ ํตํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ - ํฐ ์์ (๋น ๋ฐ์ดํฐ) ์ฒ๋ฆฌ์ ์ฉ์ด
// ๋ชจ๋ ๋ฌธ์์ด ๊ธธ์ด ํฉ int sum = strStream .**parallel()** .mapToInt(s -> s.length()) .sum();
-
๊ธฐ๋ณธํ ์คํธ๋ฆผ์ ์ง์ํ์ฌ ์คํ ๋ฐ์ฑ/์ธ๋ฐ์ฑ ๋นํจ์จ ์ ๊ฑฐ
- Stream ๋์ IntStream
IntStream,LongStream,DoubleStream๋ฑ Primitive Type์ ๋ํ Stream ์ง์- ๊ธฐ๋ณธํ ์คํธ๋ฆผ์ ์ซ์์ ๊ด๋ จ๋ ๋ฉ์๋๋ค์ ์ผ๋ฐ Stream๋ณด๋ค ๋ ๋ง์ด ์ ๊ณต (sum, count, average ๋ฑ)
-
stream() ๋ฉ์๋๋ฅผ ์ด์ฉ
Stream<E> stream()
-
of ๋ฉ์๋ ์ด์ฉํ๊ฑฐ๋ Arrays์ stream ๋ฉ์๋ ์ด์ฉ
// ๊ฐ๋ณ ์ธ์ Stream<T> Stream.of(T... values) // ๋ฐฐ์ด Stream<T> Stream.of(T[] values) Stream<T> Arrays.stream(T[] values) // ์ผ๋ถ ์์๋ง ํฌํจ Stream<T> Arrays.stream(T[] values, int start, int end) // ๊ธฐ๋ณธํ ๋ฐฐ์ด ์คํธ๋ฆผ IntStream IntStream.of(int[] values)
-
๊ธฐ๋ณธํ ์๋ฃํ์ ๋ฌดํ/์ ํ ๊ฐ ๋์๋ฅผ ํฌํจ
-
Random ์ธ์คํด์ค์ ๋ฉ์๋๋ฅผ ์ด์ฉ
// begin ~ end ์ฌ์ด์ ์๋ฅผ ๋ฌดํ ๊ฐ ํฌํจ IntStream ints(int begin, int end) DoubleStream doubles(double begin, double end) // ์์ ์๋ฅผ ์ ํ ๊ฐ๋ก ์ ํ IntStream ints(long streamSize, int begin, int end) DoubleStream doubles(long streamSize, double begin, double end)
-
๊ธฐ๋ณธํ ์๋ฃํ์ ํน์ ๋ฒ์ ์ ์๋ฅผ ํฌํจ
-
๊ฐ ๊ธฐ๋ณธํ ์คํธ๋ฆผ์
range๋ฉ์๋๋ฅผ ์ด์ฉIntStream IntStream.range(int begin, int end)
- ๋ฒ์๋ begin โค element < end
- end๋ฅผ ํฌํจํ๊ณ ์ถ๋ค๋ฉด
rangeClosed๋ฅผ ์ฌ์ฉ
-
๋๋ค์์ ๊ฒฐ๊ณผ๊ฐ์ ์์๋ก ํฌํจ
-
๋ฌดํ ์คํธ๋ฆผ (limit์ ํตํด ์๋ผ ์ฌ์ฉํด์ผ ํจ)
-
iterate
- ์ด์ ์์๋ฅผ seed๋ก ๋ค์ ์์๋ฅผ ๊ณ์ฐ
static <T> Stream<T> iterate(T seed, UnaryOperator<T> f) // example [0, 2, 4, 6, ... n, n+2] Stream<Integer> evenStream = Stream.iterate(0, n->n+2);
-
generate
- ์ฃผ์ด์ง ๋๋ค์์ ๊ธฐ๋ฐ์ผ๋ก ์์๋ฅผ ํฌํจ
static <T> Stream<T> generate(Supplier<T> s) // example [1, 1, 1, ... 1, 1] Stream<Integer> oneStream = Stream.generate(()->1);
-
ํ์ผ์ ์์๋ก ํฌํจ
-
ํ์ผ ์์ฒด๋ฅผ ์์๋ก ํฌํจ
Stream<Path> Files.list(Path dir)
-
ํ์ผ ๋ด์ฉ์ ๋ผ์ธ ๋จ์๋ก ์์๋ก ํฌํจ
Stream<String> Files.lines(Path path) Stream<String> Files.lines(Path path, Charset cs) Stream<String> lines() // BufferedReader์ ๋ฉ์๋