4 ms·
> The customers and customerOrderGroups are intermediate. The `customers` and `customerOrderGroups` are variables in each of the examples. Which is the point o
by mythz 11y ago
> The customers and customerOrderGroups are intermediate.
The `customers` and `customerOrderGroups` are variables in each of the examples. Which is the point of a close 1:1 translation between different languages. linq43 groups Customer Orders in a single expression by Year/Month into an anonymous structure. This just doesn't translate very well to Java 7 which lacks many of the language features to make it more readable.
Of course it can be rewritten using Java 8 streams which is much better suited for functional programming courtesy of lambda's (which is the primary cause for much of the boiler-plate). But until it's supported in Android we have to make do with what we have.
----
Should also give a shout-out to RetroLambda which I just discovered in the comments: https://github.com/orfjackal/retrolambda https://github.com/orfjackal/retrolambda
Which looks like it's a post-build Maven and Gradle plugin to back port Java 8 features to be able to run on Java 7 Android and JVM runtime. Not sure if there are any disadvantages with this approach (debugging?) but it's an interesting alternative.
Another option would be to just use a different JVM language, Kotlin looks the most appealing to me which supports Android and has good Java interoperability:
http://kotlinlang.org/docs/tutorials/kotlin-android.html http://kotlinlang.org/docs/tutorials/kotlin-android.html
- benjiweber 11y agoYes Kotlin seems like a very nice option for Android. One could also go for implementing a more Linq-esq style in Java. Something like http://benjiweber.co.uk/blog/2013/12/28/typesafe-database-interaction-with-java-8/ http://benjiweber.co.uk/blog/2013/12/28/typesafe-database-in... could be implemented on top of collections as well as databases.
- benjiweber 11y agoJava 8 version would actually look a bit more like void linq43() { CustomerOrderGroups var = () -> getCustomerList() .stream() .map(c -> tuple( c.companyName(), group(c.orders()).by(o -> o.date().year()) .thenBy(o -> o.date().month())) ).collect(toList()); var.grouped().stream().forEach( System.out::println ); } http://pastie.org/10324237 http://pastie.org/10324237 I think.