Using java streams to find if a number is prime or not

  • A+
Category:Languages

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 elements of this stream match the provided predicate

Your current code is using IntStream.anyMatch

Returns whether any elements of 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 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); } 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: