generate(Supplier<T> s) method uses the specified Supplier to generate an infinite sequential unordered stream.
The following code prints five random numbers greater than or equal to 0.0 and less than 1.0.
Stream.generate(Math::random) .limit(5) .forEach(System.out::println);
To use the generate() method to generate an infinite stream in which the next element is generated based on the value of the previous element, use a Supplier that stores the last generated element.
The following code prints five prime numbers after skipping the first 100:
import java.util.stream.Stream; public class Main { public static void main(String[] args) { Stream.generate(new PrimeUtil()::next) .skip(100)/*from w w w. j av a 2s .com*/ .limit(5) .forEach(System.out::println); } } class PrimeUtil { private long lastPrime = 0L; // Computes the prime number after the last generated prime public long next() { lastPrime = next(lastPrime); return lastPrime; } // Computes the prime number after the specified number public static long next(long after) { long counter = after; // Keep looping until you find the next prime number while (!isPrime(++counter)) ; return counter; } // Checks if the specified number is a prime number public static boolean isPrime(long number) { // <= 1 is not a prime number if (number <= 1) { return false; } // 2 is a prime number if (number == 2) { return true; } // Even numbers > 2 are not prime numbers if (number % 2 == 0) { return false; } long maxDivisor = (long) Math.sqrt(number); for (int counter = 3; counter <= maxDivisor; counter += 2) { if (number % counter == 0) { return false; } } return true; } }