tee()

Kevin Bourrillion kevinb at google.com
Thu Jan 24 13:10:00 PST 2013


Okay, what I'm about to suggest may be ridiculous; I don't know.

But when I want to debug, I want to debug without having to make a code
change!  I even want to debug straight in production.  So what I would wish
that I could do is attach my debugger, <handwave> flip some system property
or static boolean somewhere, and that causes all stream operations to be
executed eagerly as they are specified.  Now I can break anywhere I want
and see what I want to see.


On Thu, Jan 24, 2013 at 1:05 PM, Brian Goetz <brian.goetz at oracle.com> wrote:

> But streams *are* lazy.  What confuses people is that when you say:
>
>   stream.filter(...)
>         .map(...)
>         .reduce(...)
>
> the filtering, mapping, and reducing are all happening *at once*.  Users
> will look for a place to stick a breakpoint "after the filtering" and come
> up empty.  By putting a "peek()" call with debugging code, now they have a
> place to put a breakpoint or print stuff out, so they can debug complex
> pipelines stage by stage.
>
>
> On 1/24/2013 4:02 PM, Kevin Bourrillion wrote:
>
>> On Thu, Jan 24, 2013 at 12:53 PM, Brian Goetz <brian.goetz at oracle.com
>> <mailto:brian.goetz at oracle.com**>> wrote:
>>
>>     Don convinced me of the need for this one when he described
>>     experiences his team had adapting to lazy collections in their
>>     libraries.
>>
>>
>> Depending on the details of that conversation, I either buy it or don't
>> buy it. :-)
>>
>> Lazy collections are a whole other story; Collection<E> gets returned
>> from API X and passed into API Y and people don't realize it; that lazy
>> evaluation happens god-knows-when.  Stream<E> makes that a lot better.
>>
>>
>>
>>     On 1/24/2013 3:43 PM, Kevin Bourrillion wrote:
>>
>>         tee() stands out like a sore thumb.  I'm not surprised that
>>         Brian says
>>         "this method is mostly for debugging."
>>
>>         It just feels very, very strange to let the user inject a
>>         side-effect
>>         into the middle of their stream somewhere, for mysterious hidden
>>         later
>>         execution /maybe/.
>>
>>
>>         If it really must stay, I think I do like "peek" or "observe" over
>>         "tee". But I would love to drop it.
>>
>>         --
>>         Kevin Bourrillion | Java Librarian | Google, Inc.
>>         |kevinb at google.com <mailto:kevinb at google.com>
>>         <mailto:kevinb at google.com <mailto:kevinb at google.com>>
>>
>>
>>
>>
>>
>> --
>> Kevin Bourrillion | Java Librarian | Google, Inc. |kevinb at google.com
>> <mailto:kevinb at google.com>
>>
>


-- 
Kevin Bourrillion | Java Librarian | Google, Inc. | kevinb at google.com


More information about the lambda-libs-spec-observers mailing list