#1184
[Java] Lambda
Lambda (before Java 8) with Lambdaj
enum Gender { Male, Female, Unknown; }
class Person { private String name; private Integer age; private Gender gender; private List<Person> children = new ArrayList<Person>(); // Getters & Setters & Constructors // ... }
import static ch.lambdaj.Lambda.having; import static ch.lambdaj.Lambda.on; import static ch.lambdaj.Lambda.select; import static ch.lambdaj.collection.LambdaCollections.with; import org.hamcrest.Matcher; import org.hamcrest.Matchers; class Main { List<Person> allPersons = new ArrayList<Person>(); { allPersons.add(new Person("John Doe", Gender.Male, 21)); allPersons.add(new Person("Jane Doe", Gender.Female, 32)); allPersons.add(new Person("Alfred", Gender.Male, 75)); allPersons.add(new Person("Master Yoda", Gender.Unknown, 900)); } public void simpleFilter { List<Tax> listOfMen = select(allPersons, // having(on(Person.class).getGender(), Matchers.is(Gender.Male)); // or List<Tax> listOfMen2 = with(allPersons).clone() // .retain(having(on(Person.class).getGender(), Matchers.is(Gender.Male)); } public void combineFilters { // AND List<Tax> listOfMenAndAge21 = select(allPersons, Matchers.allOf(// having(on(Person.class).getGender(), Matchers.is(Gender.Male)), // having(on(Person.class).getAge(), Matchers.equalTo(21)))); // OR List<Tax> listOfMenOrUnknown = select(allPersons, Matchers.anyOf(// having(on(Person.class).getGender(), Matchers.is(Gender.Male)), // having(on(Person.class).getGender(), Matchers.is(Gender.Unknown)))); } public void utils{ // joinFrom String result = Lambda.joinFrom(allPersons).getName(); // will return : John Doe, Jane Doe, Alfred, Master Yoda // forEach Lambda.forEach(allPersons).setModifiedBy("Me"); // sort Lambda.sort(allPersons, on(Person.class).getAge()); // selectMin / selectMax / minFrom / maxFrom List<Person> results = select(allPersons, having(on(Person.class).getAge(), equalTo(selectMin(allPersons, on(Person.class).getAge())))); Integer maxAge = Lambda.maxFrom(allPersons).getAge(); } public void utils2{ // Add children allPersons.get(0).getChildren().add(new Person("John Doe Junior #1", Gender.Female, 1)); allPersons.get(0).getChildren().add(new Person("John Doe Junior #2", Gender.Male, 2)); allPersons.get(1).getChildren().add(new Person("Jane Doe Junior", Gender.Male, 2)); allPersons.get(2).getChildren().add(new Person("Alfred Junior", Gender.Female, 1)); allPersons.get(3).getChildren().add(new Person("Yoda Junior", Gender.Unknown, 50)); System.out.println("Persons : \n\t" + allPersons); // Collect & Flatten List<Person> listOfChildren = flatten(collect(allPersons, on(Person.class).getChildren())); System.out.println("Children : \n\t" + listOfChildren); // Return : [<John Doe Junior #1>, <John Doe Junior>, <Jane Doe Junior>, <Alfred Junior>, <Yoda Junior>] // Filter on flatten list List<Person> listOfDaughters = select(listOfChildren, having(on(Person.class).getGender(), equalTo(Gender.Female))); System.out.println("Daughters : \n\t" + listOfDaughters); // Return : [<John Doe Junior #1>, <Alfred Junior>] // Retrieve parents List<Person> parents = select(allPersons, having(on(Person.class).getChildren(), hasItem(isIn(listOfDaughters)))); System.out.println("Parent of Daughters : \n\t" + parents); // Return : [<John Doe>, <Alfred>] // hasItem(isIn(...)) : Creates a matcher for Iterables that matches if at least one element is present } }
Maven dependencies :
<dependency> <groupId>com.googlecode.lambdaj</groupId> <artifactId>lambdaj</artifactId> <version>2.3.3</version> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>org.exparity</groupId> <artifactId>hamcrest-date</artifactId> <version>1.1.0</version> </dependency>
[Java] Controller & Junits [Guava] Tips
Convert a list of object into a list of String :