Retrolambda: Use Lambdas on Java 7
https://github.com/orfjackal/retrolambda
Children :
https://github.com/evant/gradle-retrolambda
https://github.com/zbra-solutions/android-linq OR http://zbra-solutions.github.io/android-linq/
Retrolambda - Presentation - Use Lambdas on Java 7
https://www.youtube.com/watch?v=DUdhfPh9V_s
Using Java 8 Lambda Expressions in Android Developer Tools
https://hakanyamanyar.wordpress.com/2014/07/08/using-java-8-lambda-expressions-in-android-developer-tools/
Finally, Is it possible to use Java 8 for Android development?
http://stackoverflow.com/questions/23318109/is-it-possible-to-use-java-8-for-android-development
Bogdan Mart.Collection Query
https://bitbucket.org/mart_bogdan/collectionsquery
download - http://mvnrepository.com/artifact/com.innahema/collections-query
The query looks like in Linq:
JavaScript:
List<String> names = Queryable.from(people)
.filter(p->p.age>20)
.map (p->p.name)
.toList();
Functional Operations
Today I play with Bogdan Mart.CollectionsQuery</b> (which is a JAR 109kb) on eclipse with JDK v1.8 when I type the above^ example, there was an error.. At least I can use Functional Operations, the following snippet working :
JavaScript:
//the class it self :)
public class Supermarkets {
private Boolean is_selected;
public Boolean getIs_selected() {
return is_selected;
}
public void setIs_selected(Boolean is_selected) {
this.is_selected = is_selected;
}
}
//the activity code
private ArrayList<Supermarkets> Frag_Settings_Supermarkets_LIST = null;
.
.
.
//returns the selected items from the list
List<Supermarkets> names = Queryable.from(Frag_Settings_Supermarkets_LIST).filter(new Predicate<Supermarkets>() {
@Override
public boolean apply(Supermarkets p) {
return p.getIs_selected() == true;
}
}).toList();
ProGuard rules
JavaScript:
# Keel all innahema classes
-keep class com.innahema.** { *; }
-dontwarn com.innahema.**
my APK filesize before collections-query-0.2.9.jar was 557kb
with collections-query-0.2.9.jar 604kb
The same can be done with Google.Guava (http://mvnrepository.com/artifact/com.google.guava/guava/19.0) (which is a JAR 2.5mb) via :
JavaScript:
//the class it self :)
public class Supermarkets {
private Boolean is_selected;
public Boolean getIs_selected() {
return is_selected;
}
public void setIs_selected(Boolean is_selected) {
this.is_selected = is_selected;
}
}
//the activity code
private ArrayList<Supermarkets> Frag_Settings_Supermarkets_LIST = null;
.
.
.
//returns the selected items from the list
List<Supermarkets> names = Lists.newArrayList(Iterables.filter(Frag_Settings_Supermarkets_LIST, new Predicate<Supermarkets>(){
@Override
public boolean apply(Supermarkets p) {
return p.getIs_selected() == true;
}
}));
ProGuard rules
JavaScript:
# Keel all innahema classes
-keep class com.google.** { *; }
-dontwarn com.google.***
my APK filesize before guava-19.0.jar was 557kb
with guava-19.0.jar 1.14mb
similar org.apache.commons.collections - http://apachecommonstipsandtricks.blogspot.com/2009/01/examples-of-functors-transformers.html