package test; import java.util.concurrent.TimeUnit; import java.util.*; import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.annotations.*; @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS) @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS) @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) @Fork(3) @State(Scope.Benchmark) public class OptionalTest { @Param({"10", "1000", "1000000"}) int n; int[] input; @Setup public void setup() { input = new Random(1).ints(n).toArray(); } OptionalInt toOptional(int i) { return i % 2 == 0 ? OptionalInt.of(i) : OptionalInt.empty(); } @Benchmark public int testOptionalStream() { return Arrays.stream(input) .mapToObj(this::toOptional).flatMapToInt(OptionalInt::stream).sum(); } @Benchmark public int testOptionalFilterGet() { return Arrays.stream(input).mapToObj(this::toOptional) .filter(OptionalInt::isPresent).mapToInt(OptionalInt::getAsInt).sum(); } }