IntStream iterate in steps

前端 未结 7 1443
悲&欢浪女
悲&欢浪女 2020-12-03 07:41

How do you iterate through a range of numbers (0-100) in steps(3) with IntStream?

I tried iterate, but this never stops executing.

IntS         


        
相关标签:
7条回答
  • 2020-12-03 08:45

    Actually range is ideal for this.

    IntStream.range(0, 100).filter(x -> x % 3 == 0); //107,566 ns/op [Average]
    

    Edit: Holgers's solution is the fastest performing solution.

    Since the following lines of code

    IntStream.range(0, 100).filter(x -> x % 3 == 0).forEach((x) -> x = x + 2); 
    
    IntStream.range(0, 100 / 3).map(x -> x * 3).forEach((x) -> x = x + 2); 
    
    int limit = ( 100 / 3 ) + 1; 
    IntStream.iterate(0, n -> n + 3).limit(limit).forEach((x) -> x = x + 2);
    

    show these benchmark results

    Benchmark                 Mode  Cnt    Score    Error  Units
    Benchmark.intStreamTest   avgt    5  485,473 ± 58,402  ns/op
    Benchmark.intStreamTest2  avgt    5  202,135 ±  7,237  ns/op
    Benchmark.intStreamTest3  avgt    5  280,307 ± 41,772  ns/op
    
    0 讨论(0)
提交回复
热议问题