RFR 8050819: Please add java.util.Stream.ofNullable(T object)
Remi Forax
forax at univ-mlv.fr
Tue Jan 27 23:09:33 UTC 2015
On 01/27/2015 11:49 PM, Stuart Marks wrote:
>
> On 1/26/15 2:15 PM, Remi Forax wrote:
>>
>> On 01/26/2015 07:42 PM, Alan Bateman wrote:
>>> On 26/01/2015 18:32, Paul Sandoz wrote:
>>>> On Jan 20, 2015, at 7:05 PM, Paul Sandoz <Paul.Sandoz at oracle.com>
>>>> wrote:
>>>>> Hi,
>>>>>
>>>>> http://cr.openjdk.java.net/~psandoz/jdk9/JDK-8050819-Stream-ofNullable/webrev/
>>>>>
>>>>>
>>>>> Stream.ofNullable can make it easier to work fluently when streams
>>>>> are
>>>>> produced, for example within flatMap.
>>>>>
>>>> So far there have been "null" reviews :-)
>
> I think I saw an empty review fly by. :-)
>
> One quick note on the tests: the test data factory is
>
> TestData.Factory.ofSupplier("[0, 1)", ...)
>
> which would seem to me to contain a single value zero, but they all
> use one as the value. Not that it really matters, but I was puzzling
> over it.
>
>>> This looks okay to me, and the naming consistent with Optional.
>>>
>>> -Alan.
>>
>> I'm not sure this method pull it's own weight,
>> it can be written like this:
>> Optional.ofNullable(t).stream()
>
> It's certainly possible, but it seems like an unnecessary level of
> indirection. The need for something like this has come up multiple
> times, and it seems logical for it to be next to Stream.of() and
> Stream.empty().
>
>> I'm pretty sure that the JIT will remove the creation of the
>> intermediary Optional
>> and adding a method in the JDK that considers that null is an
>> acceptable value
>> is in my opinion the wrong signal to send.
>
> I guess having a method like this makes it easier for people to deal
> with their possibly-null-producing code in a new streams world. Such
> null-producing code already exists. I guess you could say that
> providing this method encourages people to continue producing nulls,
> but everybody is already doing this today, so....
I prefer to be optimistic and think that at some point in the future,
people will think twice before returning null or storing null in a
collection.
Anyway, if you have a code that already produce a null value, you can
wrap it using Optional
as I've suggested or just let the value be streamed and filter it out,
that's why we have Objects.nonNull() after all.
Stream.of(t).filter(Objects::nonNull)
>
> s'marks
Rémi
More information about the core-libs-dev
mailing list