code: @Override
  	public double integrate(DoubleUnaryOperator integrand) {
  		double	lowerBound			= getLowerBound();
  		double	upperBound			= getUpperBound();
  		double	range				= upperBound-lowerBound;
  
  		// Create random number sequence generator (we use MersenneTwister)
  		MersenneTwister		mersenneTwister		= new MersenneTwister(seed);
  
  		DoubleStream randomNumberSequence = IntStream.range(0, numberOfEvaluationPoints).sequential().mapToDouble(new IntToDoubleFunction() {
  			@Override
  			public double applyAsDouble(int i) {
  				return mersenneTwister.nextDouble();
  			}
  		});
  
  		return randomNumberSequence.map(new DoubleUnaryOperator() {
  			@Override
  			public double applyAsDouble(double x) {
  				return (integrand.applyAsDouble(lowerBound + x * range));
  			}
  		}).sum() * range / numberOfEvaluationPoints;
  	}
docs: /* (non-Javadoc)
  @see net.finmath.integration.AbstractRealIntegral#integrate(java.util.function.DoubleUnaryOperator)