Its very hard to come-up with a hard & fast rule on when to use Stream
API/Lambda or traditional loops. However, in the Carbon platform we have
come-up with a rule of thumb for such scenario.

*Always give the priority to code readability*.


It doesn't matter whether you use Streams, Lambda, or traditional loops,
always write clean, readable, self-descriptive code. *Only exception is
performance*. If your code is performance critical, then you are allowed to
do optimizations that might lead to a more complex code. Even in such
situation, always try to maintain the code readability at a high level
(comments can be a good tool here).

Why Code Readability Matters? [1]

[1] https://dzone.com/articles/why-code-readability-matters

Thanks.


On Fri, Apr 7, 2017 at 12:16 PM, Vidura Nanayakkara <vidu...@wso2.com>
wrote:

> Hi,
>
> Blog [1] <http://blog.codefx.org/java/stream-performance/> compares
> streams and loops for arrays and lists for different types of operations
> and is worth taking a look at. Blog [2]
> <https://blog.oio.de/2016/01/22/parallel-stream-processing-in-java-8-performance-of-sequential-vs-parallel-stream-processing/>
>  discusses
> when to use parallel streams which are also worth taking a look. IMO this
> depends according to the scenario you are left to deal with. For instance,
> in Carbon UUF we use loops instead of streams since the datasets we
> consider are relatively small (UUF is performance critical). There are also
> instances where we use streams where the possible performance drop due to
> using streams is small considering the code readability (the code is
> complex when loops are used).
>
> [1] Loops vs Streams <http://blog.codefx.org/java/stream-performance/>
> [2] Parallel stream processing in Java 8 – performance of sequential vs.
> parallel stream processing
> <https://blog.oio.de/2016/01/22/parallel-stream-processing-in-java-8-performance-of-sequential-vs-parallel-stream-processing/>
> [3] What's Wrong in Java 8, Part III: Streams and Parallel Streams
> <https://dzone.com/articles/whats-wrong-java-8-part-iii>
>
> On Fri, Apr 7, 2017 at 9:02 AM, Jude Niroshan <jude.nirosha...@gmail.com>
> wrote:
>
>> I agree with Tharika. It's more important to know that streams can be
>> considered when you need parallel processing done. Being said that, usage
>> has to be careful about the mutable operations. AFAIK, streams are good at
>> map reduction over the traditional for loops. It is more easy to manipulate
>> the collections. But it is not advisable to always go for streams.
>>
>> On Thu, Apr 6, 2017 at 8:54 PM, Pumudu Ruhunage <pum...@wso2.com> wrote:
>>
>>> Hi, IMO for less number of iterations/elements for loops are much
>>> efficient, and when number gets higher both are performing with similar
>>> efficiency. Advantage of parallel streams shows up when number of elements
>>> increases and cost of each iteration increases.
>>> Therefore, usage of streams/loops is highly dependent of the scenario
>>> and can not suggest either without proper knowledge of the scenario,
>>> especially for critical paths.
>>>
>>> Regards,
>>>
>>> On Thu, Apr 6, 2017 at 5:19 PM, Tharika Madurapperuma <thar...@wso2.com>
>>> wrote:
>>>
>>>> Hi Rajith,
>>>>
>>>>     IMO Java streams should not be used always as a practice. It is not
>>>> a silver bullet. There can be issues in performance in some cases as you
>>>> have pointed out.
>>>>
>>>>     One of the main advantage of using streams is when the logic of
>>>> looping is quite complex and involves different operations on collections
>>>> together, so that it can improve readability and understandability. But at
>>>> the same time it can result in new and subtle bugs if we are not careful
>>>> enough [1].
>>>>
>>>>      The performance aspect of streams vs loops depends on the type of
>>>> the collection and the situation they deal with. This performance
>>>> difference can sometimes be negligible. Hence we cannot completely go with
>>>> one against another.
>>>>
>>>>      So IMHO we can consider using streams only when necessary based on
>>>> our requirement and use loops where it deserves.
>>>>
>>>>
>>>> [1] https://blog.jooq.org/2014/06/13/java-8-friday-10-subtle-mis
>>>> takes-when-using-the-streams-api/
>>>>
>>>>
>>>> Thanks,
>>>> Tharika.
>>>>
>>>>
>>>> On Thu, Mar 30, 2017 at 12:01 PM, Rajith Roshan <raji...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> Most of our C5 development have used java8 streams api frequently more
>>>>> than the for loops.
>>>>> But there are some research have done to compare the performance of
>>>>> streams api compared to for loops. They have shown that stream API is slow
>>>>> compared to for loops in many scenarios (even for parallel streams). 
>>>>> [1][2]
>>>>>
>>>>> Is there any proper guidance to use which one over the other or are we
>>>>> using streams as a practice in C5 development
>>>>>
>>>>> [1] - https://blog.jooq.org/2015/12/08/3-reasons-why-you-shouldn
>>>>> t-replace-your-for-loops-by-stream-foreach/
>>>>> [2] - https://jaxenter.com/java-performance-tutorial-how-fast-ar
>>>>> e-the-java-8-streams-118830.html
>>>>>
>>>>> Thanks!
>>>>> Rajith
>>>>>
>>>>> --
>>>>> Rajith Roshan
>>>>> Software Engineer, WSO2 Inc.
>>>>> Mobile: +94-72-642-8350 <%2B94-71-554-8430>
>>>>>
>>>>> _______________________________________________
>>>>> Dev mailing list
>>>>> Dev@wso2.org
>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> *Tharika Madurapperuma*
>>>> Software Engineer | WSO2, Inc.
>>>>
>>>> Email : thar...@wso2.com
>>>> Mobile : +94777875624 <+94%2077%20787%205624>
>>>> Web : http://wso2.com
>>>>
>>>> <http://wso2.com/signature>
>>>>
>>>> _______________________________________________
>>>> Dev mailing list
>>>> Dev@wso2.org
>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>
>>>>
>>>
>>>
>>> --
>>> Pumudu Ruhunage
>>> Software Engineer | WSO2 Inc
>>> M: +94 779 664493  | http://wso2.com
>>> <https://wso2.com/signature>
>>>
>>> _______________________________________________
>>> Dev mailing list
>>> Dev@wso2.org
>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>
>>>
>>
>> _______________________________________________
>> Dev mailing list
>> Dev@wso2.org
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> Best Regards,
>
> *Vidura Nanayakkara*
> Software Engineer
>
> Email : vidu...@wso2.com
> Mobile : +94 (0) 717 919277 <+94%2071%20791%209277>
> Web : http://wso2.com
>
> _______________________________________________
> Dev mailing list
> Dev@wso2.org
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>


-- 
Sajith Janaprasad Ariyarathna
Senior Software Engineer; WSO2, Inc.;  http://wso2.com/
<https://wso2.com/signature>
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to