Java: Stream - infinite Stream
๐ ๋ชฉ์ฐจ (Contents)
Java - infinite Stream - generate, iterate
Stream.generate(supplier)์ ๊ฒฝ์ฐ ์ ๋ฌ๋ฐ์supplier์ ๋ฐ๋ผ ๋ฌดํํ ๊ฐ์ ์์ฑํด๋ด๋ stream์ ๋๋ค.
import java.util.stream.*;
class Main {
public static void main(String[] args) throws Exception {
// Infinite Stream
// Stream.generate(Supplier)
// Supplier๋ input์ ์๊ณ , output๋ง ์๋ function์ด์ฃ .
// infStream_alwaysReturn10์ ํญ์ 10์ ๋ฆฌํดํ๋ supplier๋ฅผ ์ ๋ฌ๋ฐ์์ต๋๋ค.
Stream<Integer> infStream_alwaysReturn10 = Stream.generate( () -> 10);
infStream_alwaysReturn10.limit(5).forEach(
x -> System.out.printf("%d ", x)
); // 10 10 10 10 10
System.out.println("====");
// infStream_alwaysReturnRandom์ Random์ ๋ฆฌํดํ๋ supplier๋ฅผ ๋ฃ์ด์ฃผ์์ต๋๋ค.
// Math.random()์ seed๋ฅผ ํ์ฌ ์๊ฐ์ ์ฌ์ฉํด์ ์ง์ด๋ฃ๊ธฐ ๋๋ฌธ์ seed๋ฅผ ๊ณ ์ ํ ์ ์์ต๋๋ค.
Stream<Double> infStream_alwaysReturnRandom = Stream.generate( () -> Math.random());
infStream_alwaysReturnRandom.limit(3).forEach(
x -> System.out.printf("%f ", x)
); // 0.715705 0.227926 0.006454
System.out.println("====");
}
}
Streamd.iterate(seed, unaryOperator)์ ๊ฒฝ์ฐ seed๋ก๋ถํฐ ์ถ๋ฐํด์,unaryOperator๋ฅผ ์ ์ฉํ์ฌ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ๋ฃ์ด์ฃผ์ฃ . ๊ทธ๋ฅ ๋ฌดํ ๋ฑ์ฐจ์์ด ๊ฐ์ ์ ๋ฅผ ๋ง๋ค ์ ์๋ค, ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
import java.util.stream.*;
class Main {
public static void main(String[] args) throws Exception {
// Stream.iterate(seed, unaryOperator)๋
// seed๋ถํฐ ์ถ๋ฐํ์ฌ unaryOperator๋ฅผ ์ ์ฉํ์ฌ ์๋ก์ด ๊ฐ์ ์์ฑํด์ฃผ์ฃ .
// .takeWhile(predicate)๋ฅผ ์ฌ์ฉํด์ ํด๋น ์กฐ๊ฑด์ด ๋ง์กฑ๋์ง ์์ผ๋ฉด Stream์ด ๋๋๋๋ก ๋ง๋ค์์ต๋๋ค.
Stream<Integer> infStream_iterate1 = Stream.iterate(1, x -> x + 3);
infStream_iterate1.takeWhile( x -> x < 10).forEach(
x -> System.out.printf("%d ", x)
); // 1 4 7
System.out.println("====");
}
}
GitHub์์ ์ด ๊ธ์ ๋งํฌ๋ค์ด ์๋ณธ ๋ณด๊ธฐ & ์์ ์ ์src/content/posts/2020-12-23-java_stream_infinite_stream