- Notifications
You must be signed in to change notification settings - Fork0
support Guava functions by APT
License
t2v/guavapt
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Guavapt isGuava Functional Idioms support with APT.
Funcito is so cool!However Funcito does not support final classes.
Since we want to use@Value annotation ofLombok, we create guavapt.
Add@Guavapt
annotation into your bean class.
packagemy.cool.lib;importjava.util.List;importjp.t2v.guavapt.Guavapt;@GuavaptpublicclassCompany {privatefinalintid;privatefinalStringname;privatefinalList<Employee>employees;privatefinalbooleanlisted;publicCompany(intid,Stringname,List<Employee>employees,booleanlisted) {this.id =id;this.name =name;this.employees =employees;this.listed =listed; }publicintgetId() {returnid; }publicStringgetName() {returnname; }publicList<Employee>getEmployees() {returnemployees; }publicbooleanisListed() {returnlisted; }publicbooleanhasEmployee() {return !employees.isEmpty(); }}
You can use Functions and Predicates as follows.
List<Company>companies = ...List<Integer>listedCompanyIds =FluentIterable.from(companies) .filter(CompanyPredicates.isListed) .transform(CompanyFunctions.getId) .toList();
packagemy.cool.lib;importcom.google.common.base.Function;publicclassCompanyFunctions {privateCompanyFunctions() {}publicstaticfinalFunction<Company,java.lang.Integer>getId =newFunction<Company,java.lang.Integer>() {@Overridepublicjava.lang.Integerapply(finalCompanyinput) {returninput.getId(); } };publicstaticfinalFunction<Company,java.lang.String>getName =newFunction<Company,java.lang.String>() {@Overridepublicjava.lang.Stringapply(finalTestEntityinput) {returninput.getName(); } };publicstaticfinalFunction<Company,java.util.List<my.cool.lib.Employee>>getEmployees =newFunction<Company,java.util.List<my.cool.lib.Employee>>() {@Overridepublicjava.util.List<my.cool.lib.Employee>apply(finalCompanyinput) {returninput.getEmployees(); } };publicstaticfinalFunction<Company,java.lang.Boolean>isListed =newFunction<Company,java.lang.Boolean>() {@Overridepublicjava.lang.Booleanapply(finalCompanyinput) {returninput.isListed(); } };publicstaticfinalFunction<Company,java.lang.Boolean>hasEmployee =newFunction<Company,java.lang.Boolean>() {@Overridepublicjava.lang.Booleanapply(finalCompanyinput) {returninput.hasEmployee(); } };}
and
packagemy.cool.lib;importcom.google.common.base.Predicate;publicclassCompanyPredicates {privateCompanyPredicates() {}publicstaticfinalPredicate<Company>isListed =newPredicate<Company>() {@Overridepublicbooleanapply(finalCompanyinput) {returninput.isListed(); } };publicstaticfinalPredicate<Company>hasEmployee =newPredicate<Company>() {@Overridepublicbooleanapply(finalCompanyinput) {returninput.hasEmployee(); } };}
@Guavapt
annotation can take parametes.
@Guavapt(functions =true,predicates =false)
When functions is true, Guavapt generate functions class.
When predicates is true, Guavapt generate predicates class.
You can change class name suffix of generated class.
addguavapt.f.suffix
orguavapt.p.suffix
processor options.
for example
javac -cp guavapt.jar -s -Aguavapt.f.suffix=Foo -Aguavapt.p.suffix=Bar my/cool/lib/Company.java
Gavapt generateCompanyFoo
andCompanyBar
insted ofCompanyFunctions
andCampanyPredicates
This library is released under the Apache Software License, version 2, which should be included with the source in a file named LICENSE.