Picking from a list of individuals based on their fitness values
You have to keep in mind that Streams are not the solution to everything. In this case for example, you need to keep track of multiple values, i.e. the current individual, and a cumulative sum (and you have to return a a value as soon as a certain condition is met). Yes, there are ways to do this with Streams, but I think in this case it is best to implement it with a simple loop like you have.

A couple of side notes:


Use the primitive type double instead of the wrapper class.
Declare variables as late as possible.
Perhaps allow the user to pass a Random instance.
I think your implementation can be simplified by subtracting, which would then mean you only have to check for &lt; 0, e.g.:

double fitnessSum = genePool.stream()
        .mapToDouble(individual -&gt; individual.fitnessValue)
        .sum();

double remainder = Math.random() * fitnessSum;
for (Individual gene : genePool) {
    remainder -= gene.fitnessValue;
    if (remainder &lt;= 0.0) {
        return gene;
    }
}
return genePool.get(genePool.size() - 1);