Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to transform a for loop into stream loop

How to transform this code into a stream loop:

for(long l = 1L; l <= 250000; l++) {
     v = value.add(BigInteger.valueOf(myMethod.getInt()));
}

I need to get the 'v' as a unique BigInteger value.

like image 300
Roland Avatar asked Mar 05 '23 03:03

Roland


1 Answers

Fundamentally, it looks like your myMethod.getInt method is a generator. Therefore, the best way to do this, in my opinion, is to create an infinite stream from your generator.

IntStream.generate(myMethod::getInt)
    .mapToObj(BigInteger::valueOf)
    .limit(25000)
    .reduce(BigInteger.ZERO, BigInteger::add)

This is clearer because you don't have to specify a range - the range is not what you care about, the number of elements is (i.e. the size of the range). You also don't have to ignore the parameter when you're mapping.

like image 154
Michael Avatar answered Apr 24 '23 22:04

Michael