Make Streams.stream(Collection) null-safe.
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 75e17ff..c9e9635 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -50,6 +50,7 @@
<action issue="LANG-1646" type="fix" dev="aherbert" due-to="Alex Herbert">NumberUtils.createNumber() to return requested floating point type for zero.</action>
<action type="fix" dev="ggregory" due-to="SpotBugs, Gary Gregory">DMI: Random object created and used only once (DMI_RANDOM_USED_ONLY_ONCE); Better multi-threaded behavior.</action>
<action issue="LANG-1646" type="fix" dev="aherbert" due-to="rturo Bernal">Redundant Collection operation. Use Collections.emptyIterator() #738.</action>
+ <action type="fix" dev="ggregory" due-to="Gary Gregory">Make Streams.stream(Collection) null-safe.</action>
<!-- ADD -->
<action type="add" dev="ggregory" due-to="Gary Gregory">Add EnumUtils.getEnumSystemProperty(...).</action>
<action type="add" dev="ggregory" due-to="Gary Gregory">Add TriConsumer.</action>
diff --git a/src/main/java/org/apache/commons/lang3/stream/Streams.java b/src/main/java/org/apache/commons/lang3/stream/Streams.java
index d9d6a2a..b564ff9 100644
--- a/src/main/java/org/apache/commons/lang3/stream/Streams.java
+++ b/src/main/java/org/apache/commons/lang3/stream/Streams.java
@@ -426,6 +426,10 @@
}
}
+ private static <O> Stream<O> nullSafeStream(final Collection<O> collection) {
+ return collection == null ? Stream.empty() : collection.stream();
+ }
+
/**
* Null-safe version of {@link Stream#of(Object[])}.
*
@@ -476,7 +480,7 @@
* @return The {@link FailableStream}, which has been created by converting the stream.
*/
public static <O> FailableStream<O> stream(final Collection<O> stream) {
- return stream(stream.stream());
+ return stream(nullSafeStream(stream));
}
/**
diff --git a/src/test/java/org/apache/commons/lang3/stream/StreamsTest.java b/src/test/java/org/apache/commons/lang3/stream/StreamsTest.java
index 8fcb4ed..c7a5cdd 100644
--- a/src/test/java/org/apache/commons/lang3/stream/StreamsTest.java
+++ b/src/test/java/org/apache/commons/lang3/stream/StreamsTest.java
@@ -143,6 +143,18 @@
}
@Test
+ public void testStreamCollection() {
+ final List<String> input = Arrays.asList("1", "2", "3", "4", "5", "6");
+ assertEquals(6, Streams.stream(input).collect(Collectors.toList()).size());
+ }
+
+ @Test
+ public void testStreamCollectionNull() {
+ final List<String> input = null;
+ assertEquals(0, Streams.stream(input).collect(Collectors.toList()).size());
+ }
+
+ @Test
public void testSimpleStreamFilter() {
final List<String> input = Arrays.asList("1", "2", "3", "4", "5", "6");
final List<Integer> output = Failable.stream(input).map(Integer::valueOf).filter(i -> (i.intValue() % 2 == 0))