f_
frhyme.code
•java•โฑ ์•ฝ 3๋ถ„ ์†Œ์š”

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("====");
    }
}

๐Ÿ’กRELATED ARTICLES ยท ํ•จ๊ป˜ ์ฝ์œผ๋ฉด ์ข‹์€ ์—ฐ๊ด€ ํฌ์ŠคํŠธ

๊ธ€ ์ฃผ์†Œ๊ฐ€ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.