- A+

I am reading *Cracking the Coding Interview* and it has an example of finding prime number which I ran on JShell

`boolean isPrime(int n) { for (int i = 2; i * i <= n; i++) { if (n % i == 0) { return false; } } return true; } `

then I am trying to convert this to streams in java, but finding this difficult as mentioned

`boolean isPrimeStream(int n) { return IntStream.range(0, n) // how to do similar to for loop above .anyMatch(i -> n % i == 0); // i think this is the reason for failure } `

You should use `IntStream.noneMatch`

there as:

`boolean isPrimeStream(int n) { return IntStream.range(2, n) // note division by zero possible in your attempt .noneMatch(i -> n % i == 0); } `

** Edit**: As pointed in comments by Andreas, using

`range(2, n)`

to avoid division by zero and since division by 1 would always lead to the condition being true and returning the result as `false`

otherwise.Returns whether

no elementsof this stream match the provided predicate

Your current code is using `IntStream.anyMatch`

Returns whether

any elementsof this stream match the provided predicate

which is why it would return `true`

if the condition specified is satisfied for any input instead of when the method is supposed to return `false`

.

how to do similar to for loop above

With java-9 or above you could use `IntStrem.iterate`

as

`private boolean isPrimeStream(int n) { return IntStream.iterate(2, i -> i * i <= n, i -> i + 1) // similar to the loop .noneMatch(i -> n % i == 0); } `