diff --git a/jdk/src/java.base/share/classes/java/util/stream/Stream.java b/jdk/src/java.base/share/classes/java/util/stream/Stream.java index bd915796272..0070658b01f 100644 --- a/jdk/src/java.base/share/classes/java/util/stream/Stream.java +++ b/jdk/src/java.base/share/classes/java/util/stream/Stream.java @@ -987,6 +987,21 @@ public interface Stream extends BaseStream> { return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false); } + /** + * Returns a sequential {@code Stream} containing a single element, if + * non-null, otherwise returns an empty {@code Stream}. + * + * @param t the single element + * @param the type of stream elements + * @return a stream with a single element if the specified element + * is non-null, otherwise an empty stream + * @since 1.9 + */ + public static Stream ofNullable(T t) { + return t == null ? Stream.empty() + : StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false); + } + /** * Returns a sequential ordered stream whose elements are the specified values. * diff --git a/jdk/test/java/util/stream/test/org/openjdk/tests/java/util/stream/StreamBuilderTest.java b/jdk/test/java/util/stream/test/org/openjdk/tests/java/util/stream/StreamBuilderTest.java index 352f3cc7099..a6fb7e0e398 100644 --- a/jdk/test/java/util/stream/test/org/openjdk/tests/java/util/stream/StreamBuilderTest.java +++ b/jdk/test/java/util/stream/test/org/openjdk/tests/java/util/stream/StreamBuilderTest.java @@ -54,9 +54,31 @@ public class StreamBuilderTest extends OpTestCase { } + @Test + public void testOfNullableWithNonNull() { + TestData.OfRef data = TestData.Factory.ofSupplier("{1}", + () -> Stream.ofNullable(1)); + + withData(data). + stream(s -> s). + expectedResult(Collections.singletonList(1)). + exercise(); + } + + @Test + public void testOfNullableWithNull() { + TestData.OfRef data = TestData.Factory.ofSupplier("{null})", + () -> Stream.ofNullable(null)); + + withData(data). + stream(s -> s). + expectedResult(Collections.emptyList()). + exercise(); + } + @Test public void testSingleton() { - TestData.OfRef data = TestData.Factory.ofSupplier("[0, 1)", + TestData.OfRef data = TestData.Factory.ofSupplier("{1}", () -> Stream.of(1)); withData(data). @@ -118,7 +140,7 @@ public class StreamBuilderTest extends OpTestCase { @Test public void testIntSingleton() { - TestData.OfInt data = TestData.Factory.ofIntSupplier("[0, 1)", + TestData.OfInt data = TestData.Factory.ofIntSupplier("{1}", () -> IntStream.of(1)); withData(data). @@ -180,7 +202,7 @@ public class StreamBuilderTest extends OpTestCase { @Test public void testLongSingleton() { - TestData.OfLong data = TestData.Factory.ofLongSupplier("[0, 1)", + TestData.OfLong data = TestData.Factory.ofLongSupplier("{1}", () -> LongStream.of(1)); withData(data). @@ -242,7 +264,7 @@ public class StreamBuilderTest extends OpTestCase { @Test public void testDoubleSingleton() { - TestData.OfDouble data = TestData.Factory.ofDoubleSupplier("[0, 1)", () -> DoubleStream.of(1)); + TestData.OfDouble data = TestData.Factory.ofDoubleSupplier("{1}", () -> DoubleStream.of(1)); withData(data). stream(s -> s).