diff --git a/src/java.base/share/classes/java/util/stream/FindOps.java b/src/java.base/share/classes/java/util/stream/FindOps.java index 131eec06236..afe31a90bdc 100644 --- a/src/java.base/share/classes/java/util/stream/FindOps.java +++ b/src/java.base/share/classes/java/util/stream/FindOps.java @@ -194,13 +194,16 @@ final class FindOps { return hasValue ? Optional.of(value) : null; } - static final TerminalOp OP_FIND_FIRST = new FindOp<>(true, - StreamShape.REFERENCE, Optional.empty(), - Optional::isPresent, FindSink.OfRef::new); - - static final TerminalOp OP_FIND_ANY = new FindOp<>(false, - StreamShape.REFERENCE, Optional.empty(), - Optional::isPresent, FindSink.OfRef::new); + static final TerminalOp OP_FIND_FIRST, OP_FIND_ANY; + static { + Predicate> isPresent = Optional::isPresent; + Supplier>> newSink + = FindSink.OfRef::new; + OP_FIND_FIRST = new FindOp<>(true, StreamShape.REFERENCE, + Optional.empty(), isPresent, newSink); + OP_FIND_ANY = new FindOp<>(false, StreamShape.REFERENCE, + Optional.empty(), isPresent, newSink); + } } /** Specialization of {@code FindSink} for int streams */ @@ -217,12 +220,16 @@ final class FindOps { return hasValue ? OptionalInt.of(value) : null; } - static final TerminalOp OP_FIND_FIRST = new FindOp<>(true, - StreamShape.INT_VALUE, OptionalInt.empty(), - OptionalInt::isPresent, FindSink.OfInt::new); - static final TerminalOp OP_FIND_ANY = new FindOp<>(false, - StreamShape.INT_VALUE, OptionalInt.empty(), - OptionalInt::isPresent, FindSink.OfInt::new); + static final TerminalOp OP_FIND_FIRST, OP_FIND_ANY; + static { + Predicate isPresent = OptionalInt::isPresent; + Supplier> newSink + = FindSink.OfInt::new; + OP_FIND_FIRST = new FindOp<>(true, StreamShape.INT_VALUE, + OptionalInt.empty(), isPresent, newSink); + OP_FIND_ANY = new FindOp<>(false, StreamShape.INT_VALUE, + OptionalInt.empty(), isPresent, newSink); + } } /** Specialization of {@code FindSink} for long streams */ @@ -239,12 +246,16 @@ final class FindOps { return hasValue ? OptionalLong.of(value) : null; } - static final TerminalOp OP_FIND_FIRST = new FindOp<>(true, - StreamShape.LONG_VALUE, OptionalLong.empty(), - OptionalLong::isPresent, FindSink.OfLong::new); - static final TerminalOp OP_FIND_ANY = new FindOp<>(false, - StreamShape.LONG_VALUE, OptionalLong.empty(), - OptionalLong::isPresent, FindSink.OfLong::new); + static final TerminalOp OP_FIND_FIRST, OP_FIND_ANY; + static { + Predicate isPresent = OptionalLong::isPresent; + Supplier> newSink + = FindSink.OfLong::new; + OP_FIND_FIRST = new FindOp<>(true, StreamShape.LONG_VALUE, + OptionalLong.empty(), isPresent, newSink); + OP_FIND_ANY = new FindOp<>(false, StreamShape.LONG_VALUE, + OptionalLong.empty(), isPresent, newSink); + } } /** Specialization of {@code FindSink} for double streams */ @@ -261,12 +272,16 @@ final class FindOps { return hasValue ? OptionalDouble.of(value) : null; } - static final TerminalOp OP_FIND_FIRST = new FindOp<>(true, - StreamShape.DOUBLE_VALUE, OptionalDouble.empty(), - OptionalDouble::isPresent, FindSink.OfDouble::new); - static final TerminalOp OP_FIND_ANY = new FindOp<>(false, - StreamShape.DOUBLE_VALUE, OptionalDouble.empty(), - OptionalDouble::isPresent, FindSink.OfDouble::new); + static final TerminalOp OP_FIND_FIRST, OP_FIND_ANY; + static { + Predicate isPresent = OptionalDouble::isPresent; + Supplier> newSink + = FindSink.OfDouble::new; + OP_FIND_FIRST = new FindOp<>(true, StreamShape.DOUBLE_VALUE, + OptionalDouble.empty(), isPresent, newSink); + OP_FIND_ANY = new FindOp<>(false, StreamShape.DOUBLE_VALUE, + OptionalDouble.empty(), isPresent, newSink); + } } } diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/FindAny.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/FindAny.java index 217a750ade7..baf43a2e96c 100644 --- a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/FindAny.java +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/FindAny.java @@ -60,4 +60,10 @@ public class FindAny { return LongStream.range(0, size).parallel().boxed().findAny().get(); } + public static void main(String... args) { + FindAny findAny = new FindAny(); + findAny.size = 100000; + findAny.seq_invoke(); + findAny.par_invoke(); + } }