I was messing around with the google collection API. It has the ability to do functional-like programming.
When using inner classes where you should use closures, one looks forward to Java with closures.
import java.util.Collection;
import java.util.Set;
import org.junit.Test;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableSet;
public class GoogleCollectionTest {
public static class Employee {
private String firstName;
private String lastName;
private String phone;
public Employee(String firstName, String lastName, String phone) {
this.firstName = firstName;
this.lastName = lastName;
this.phone = phone;
}
public Employee() {
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getPhone() {
return phone;
}
public String toString() {
return new StringBuilder(80).append(firstName).append(' ').append(lastName).toString();
}
}
public static class Phone {
private String areaCode;
private String prefix;
private String number;
public Phone() {
}
public Phone(String areaCode, String prefix, String number) {
this.areaCode = areaCode;
this.prefix = prefix;
this.number = number;
}
public String getAreaCode() {
return areaCode;
}
public String getPrefix() {
return prefix;
}
public String getNumber() {
return number;
}
@Override
public String toString() {
return new StringBuilder(50).append('(').append(areaCode).append(')')
.append(prefix).append('-').append(number).toString();
}
}
public static Employee employee(String firstName, String lastName, String phone) {
return new Employee(firstName, lastName, phone);
}
public static Set
return ImmutableSet.of(arguments);
}
public static class OnlyTucsonEmployees implements Predicate
public boolean apply(Employee input) {
if (input.getPhone().startsWith("520")) {
return true;
}
return false;
}
}
private static final OnlyTucsonEmployees tucsonEmployeesPredicate = newOnlyTucsonEmployees();
public static class EmployeeToPhone implements Function
@Override
public Phone apply(Employee from) {
String[] phoneComps = from.phone.split("-");
return new Phone(phoneComps[0], phoneComps[1], phoneComps[2]);
}
}
private static final EmployeeToPhone employeeToPhoneFunction = new EmployeeToPhone();
@Test
public void Test() {
Set
employee("Rick", "Hightower", "520-555-1212"),
employee("Noah", "Hightower", "520-555-1212"),
employee("Ryan", "Hightower", "520-555-1212"),
employee("Lucas", "Hightower", "520-555-1212"),
employee("Whitney", "Hightower", "520-555-1212"),
employee("Stephane", "Loonadi", "614-888-1515")
);
Collection
System.out.println(tucsonEmployees);
Collection
System.out.println(phoneNumbers);
Collection
System.out.println(tucsonPhoneNumbers);
}
}