Вы должны использовать IntStream.noneMatch
там как:
boolean isPrimeStream(int n) {
return IntStream.range(2, n) // note division by zero possible in your attempt
.noneMatch(i -> n % i == 0);
}
Редактировать : как указано в комментариях Андреаса, используя range(2, n)
, чтобы избежать деления на ноль, а поскольку деление на 1 всегда приводит к тому, что условие истинно, и возвращает результат как false
в противном случае.
Возвращает, нет элементов этого потока соответствует предоставленному предикату
Ваш текущий код использует IntStream.anyMatch
Возвращает ли любые элементы этого потока соответствуют предоставленному предикату
, поэтому он будет возвращать true
, если указанное условие удовлетворяется для любого входа, а не когда методдолжен возвращать false
.
как сделать аналогично циклу выше
С java-9 или выше вы можетеиспользуйте IntStrem.iterate
как
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);
}