Round 1 feedback
Paul Sandoz
paul.sandoz at oracle.com
Wed Jan 9 03:59:40 PST 2013
Hi Michael,
Thanks for the feedback.
On Jan 9, 2013, at 12:06 PM, Michael Nascimento <misterm at gmail.com> wrote:
> Hi guys,
>
> So last Friday I spent some time migrating the code from a heavily
> collection-based real world business project to JDK 8, as a way of
> seeing how it would work in practice. This project used Guava all over
> the place.
>
> Besides all the emails I've sent so far, here are a few pieces of
> extra feedback:
>
> - Code reduction was significant. My co-workers who have seen the code
> liked how well lambda is going;
> - There are still several constructions that require generics to be
> explicitly used, such as into(). Was not that the case, the reduction
> would have been even greater;
It's an ongoing task to improve the type inference of the compiler. Plus the error output at the moment is turned up to 11, it will be turned down later on.
> - There were two legacy methods in this code base that relied wrongly
> on double. When I changed the reduction to use parallelStream(), my
> unit tests failed miserably, since operations like sum are not
> commutative with doubles given their lake of precision. I guess this
> will bite developers out there. Somewhere in javadoc it could be worth
> mentioning how parallel execution might affect the output in this
> case;
When we add DoubleStream it will have a sum() method and we may be able to do something using:
http://en.wikipedia.org/wiki/Kahan_summation_algorithm
> - The main transformation in the code base is taking an Entity and
> turning it into a Map<T, Entity> (Maps.uniqueIndex in Guava). In the
> binary drop that was available at that time, there was no easy way of
> achieving that. Is there any now in b72?;
I think it could be done using Reducers.groupBy, off the top of my head (from tip of the code base but IIRC it is currently the same as b72):
Map<Foo, Entity> m = s.reduce(Reducers.groupBy(e->toFoo(e), e -> e, Reducers.THROWING_MERGER))
An ISE will be thrown if the same Foo key is produced for more than one Entity value.
I think we should encapsulate that pattern.
> - The other main Guava uses that remained were Multimaps - and there
> were many. Any plans to support them?;
Not currently. The Reducers.groupBy functionality seems to cover many cases where one might otherwise require a Multimap.
> - I was able to refactor parts of my code base in a way that wasn't
> practical before by using Block in method signatures. Of course it
> should be used wisely, but be ready to see this code smell spreading
> everywhere with Java 8.
>
> Overall, it was a very positive experience. I hope to continue with
> this experiment in a few weeks.
>
>
Great!
Paul.
More information about the lambda-dev
mailing list