<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I am for removing it and in favor of providing a default if it doesn't have nearly the same functionality as the Scala Option. The way Optional is written right now I would tell people not to use it anyway and it would just be a wart on this API.<div><br></div><div>Sam</div><div><br><div><div>On Mar 6, 2013, at 9:50 AM, Tim Peierls &lt;<a href="mailto:tim@peierls.net">tim@peierls.net</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">On Wed, Mar 6, 2013 at 7:09 AM, Doug Lea <span dir="ltr">&lt;<a href="mailto:dl@cs.oswego.edu" target="_blank">dl@cs.oswego.edu</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
&nbsp;T findFirst(Predicate&lt;? super T&gt; predicate, T ifNone);<br>
&nbsp;T findAny(Predicate&lt;? super T&gt; predicate, T ifNone);<br>
<br>
People wanting to avoid Optional can then then<br>
get all of the derived versions (allMatch, plain<br>
findAny, etc) easily enough.<br>
<br>
Surprisingly enough, that's the only missing<br>
feature that would otherwise enable a completely<br>
Optional-free usage style of the Stream API.<br>
<br>
We have both proposed variants of this several times,<br>
but they don't seem to go anywhere. It would be nice<br>
to have a calm final discussion about why we would NOT<br>
do such an apparently sensible thing!</blockquote><div><br></div><div>I've had too much coffee to be calm, and I have no way of ensuring finality, but the foremost reason I see for not allowing an Optional-free usage style is that people will adopt it rather than use Optional. They will see it as a license to put null everywhere, and they'll get NPEs way downstream and blame it on Java.</div>
<div><br></div><div>Optional should be (and currently is) a very limited abstraction, one that is only good for holding a potential result, testing for its presence, retrieving it if it is present, and providing an alternative if not. We should resist the temptation to make it into something more or make it into a knock-off of the similar Scala type.</div>
<div><br></div><div>--tim</div><div><br></div></div>
</blockquote></div><br></div></body></html>