GS Collections Kata w/ JCF Solutions (original) (raw)

Joe Bowbeer joe.bowbeer at gmail.com
Wed Jan 16 18:27:58 PST 2013


So far (b73), I haven't found any uses for -XDuseGraphInference. Most of the times I've tried it, it has thrown an AssertionException.

On Wed, Jan 16, 2013 at 6:14 PM, Raab, Donald <Donald.Raab at gs.com> wrote:

Tried. No luck.

What is it possible for this to infer beyond normal levels of inference? > -----Original Message----- > From: Brian Goetz [mailto:brian.goetz at oracle.com] > Sent: Wednesday, January 16, 2013 8:55 PM > To: Raab, Donald [Tech] > Cc: 'Joe Bowbeer'; 'lambda-libs-spec-experts at openjdk.java.net'; Weir, John > [Tech]; Motlin, Craig P. [Tech] > Subject: Re: GS Collections Kata w/ JCF Solutions > > Try compiling with -XDuseGraphInference. > > On Jan 16, 2013, at 4:15 PM, Raab, Donald wrote: > > > Great suggestion. I just gave it a try. Max takes a comparator and returns > Optional so you have to add a call to get(). I was able to change the example > to the following: > > > > Map<Double, Collection> multimap = this.company.getCustomers() > > .stream() > > .collect(Collectors.<Customer, Double>groupBy((Customer customer) -> > > customer.getOrders() > > .stream() > > .explode((Stream.Downstream downstream, Order order) -> > { > > downstream.send(order.getLineItems()); > > }) > > .map(LineItem::getValue) > > .max(Comparators.naturalOrder()) > > .get())); > > > > I get an unchecked error on Comparators.naturalOrder() in IntelliJ, but > adding there makes it ugly. > > > > This is the GS Collections version of the kata, which also used max(), but > calls this method on a DoubleIterable: > > > > MutableListMultimap<Double, Customer> multimap = this.company.getCustomers() > > .groupBy(customer -> customer.getOrders() > > .asLazy() > > .flatCollect(Order::getLineItems) > > .collectDouble(LineItem::getValue) > > .max()); > > > > Unfortunately, the type inference seems to be very successful at thwarting > me trying to simplify the above example using the stream library features. I > would like to simplify down to this but can't seem to get it to work: > > > > Map<Double, Collection> multimap = this.company.getCustomers() > > .stream() > > .collect(groupBy((customer) -> > > customer.getOrders() > > .stream() > > .explode((downstream, order) -> { > > downstream.send(order.getLineItems()); > > }) > > .map(LineItem::getValue) > > .max(Comparators.naturalOrder()) > > .get())); > > > > > > From: Joe Bowbeer [mailto:joe.bowbeer at gmail.com] > > Sent: Wednesday, January 16, 2013 4:21 PM > > To: Raab, Donald [Tech] > > Cc: lambda-libs-spec-experts at openjdk.java.net; Motlin, Craig P. [Tech]; > Weir, John [Tech] > > Subject: Re: GS Collections Kata w/ JCF Solutions > > > > Thanks. > > > > > > Would it be better to rewrite the following using Stream.max()? > > > > > > .reduce(0.0, (x, y) -> Math.max(x, y)) > > > > --Joe > > > >



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