import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; public class Sieve { private int maximalPrime; private List primes; public Sieve(int maximalPrime) { this.maximalPrime = maximalPrime; this.primes = calculatePrimes(); } public List getPrimes() { return primes; } private List calculatePrimes() { List primes = new ArrayList<>(); LinkedList candidates = IntStream.range(2, maximalPrime + 1) .boxed() .collect(Collectors.toCollection(LinkedList::new)); while (candidates.size() > 0) { Integer prime = candidates.remove(); primes.add(prime); candidates = candidates.stream() .filter(x -> x % prime != 0) .collect(Collectors.toCollection(LinkedList::new)); } return primes; } }