Convenient methods in old Iterable
Paul Sandoz
paul.sandoz at oracle.com
Fri Oct 19 04:46:26 PDT 2012
On Oct 19, 2012, at 1:21 PM, Marcos Antonio <marcos_antonio_ps at hotmail.com> wrote:
>
> Thank you for the answer, Paul. What I meant was that I had code like this: Iterable<Employee> i = employees.filter(...); Now I called i.isEmpty() or i.count(). The code was converted to this: Stream<Employee> s = employees.stream().filter(...); What is the best way to know now if the stream is empty or its count? Thank you. Marcos > Subject: Re: Convenient methods in old Iterable
Ah!
To determine if the stream is empty you can do:
s.iterator().hasNext();
but note that will commit the stream to being pulled based for any further operations on the stream.
To determine the size you have to stuff it into a collection or convert to an array.
I am not very familiar with the old API, but i strongly suspect the implementation would have internally created a collection to determine the size.
Hth,
Paul.
>> From: paul.sandoz at oracle.com
>> Date: Fri, 19 Oct 2012 13:00:44 +0200
>> CC: lambda-dev at openjdk.java.net
>> To: marcos_antonio_ps at hotmail.com
>>
>> On Oct 19, 2012, at 3:53 AM, Marcos Antonio <marcos_antonio_ps at hotmail.com> wrote:
>>> Hello! The methods isEmpty() and count() in Iterable were very convenient to me.
>>
>> An Iterable may not know it's size, or the elements of the Iterable cannot be efficiently counted. See the Sized interface.
>>
>>
>>> Now with Stream do I always need to convert the stream to a collection or an array (into() and toArray() methods) to get the same functionality or is there an easier way? Thank you.
>>>
>>
>>
>> You might be able to check if the Iterable is an instance of Sized.
>>
>> Paul.
>
>
More information about the lambda-dev
mailing list