I am supposed to make a class PrimeNumberGenerator which has a method nextPrime that will print out all prime numbers up to a number the user input
I know the question is for a while out here but since no one posted java8/stream approach solution, here is one of the possible ways.
Gist can be forked here.
Print output: [1, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]
import java.util.*;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toList;
public class PrimeNumber {
/**
* Java 8 / Lambda approach to generate Prime number.
* Prime always start to look from number 1.
* @param series Number of how many Prime number should be generated
* @return List holding resulting Prime number.
*/
public static List generate(int series) {
Set set = new TreeSet<>();
return Stream.iterate(1, i -> ++i)
.filter(i -> i %2 != 0)
.filter(i -> {
set.add(i);
return 0 == set.stream()
.filter(p -> p != 1)
.filter(p -> !Objects.equals(p, i))
.filter(p -> i % p == 0)
.count();
})
.limit(series)
.collect(toList());
}
// Let's test it!
public static void main(String[] args) {
List generate = PrimeNumber.generate(20);
System.out.println(generate);
}
}