Adapted heavily from Java Lambda tutorials
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.Collections;
// We used this interface before settling on a functional interface
// interface CheckPerson {
// public boolean test(Person p);
// }
public class Person {
public enum Sex {
MALE, FEMALE
}
String name;
int age;
Sex sex;
String emailAddress;
public int getAge() {
return age;
}
public void printPerson() {
System.out.println("Name: " + name + " Sex: "
+ sex + " Age: " + age
+ " Email: " + emailAddress);
}
@Override
public String toString(){
return name;
}
public Sex getSex(){
return sex;
}
public String getName() {
return name;
}
public Person(String name, Sex sex, int age, String emailAddress){
this.name = name;
this.age = age;
this.sex = sex;
this.emailAddress = emailAddress;
}
/************************/
/*** Original Version ***/
/************************/
/*public static void printPersonsOlderThan(List roster, int age){
for (Person p : roster)
if (p.getAge() > age)
p.printPerson();
}
public static void printPersonsAgeBetween(List roster,
int lowage, int highage){
for (Person p : roster)
if (p.getAge() > lowage && p.getAge() < highage)
p.printPerson();
}*/
/************************************/
/*** Functional Interface Version ***/
/************************************/
public static void printPersonsWithCondition(List roster,
Predicate checker){
for (Person p : roster)
if (checker.test(p))
p.printPerson();
}
public static void main(String[] args){
Person dan = new Person("Dan", Sex.MALE, 31, "daniel.schlegel@oswego.edu");
Person phil = new Person("Phil", Sex.MALE, 22, "phil@philsdomain.org");
Person alexis = new Person("Alexis", Sex.FEMALE, 44, "alexis@alexis.jp");
Person julie = new Person("Julie", Sex.FEMALE, 35, "julue@google.com");
List persons = new ArrayList<>();
persons.add(dan);
persons.add(phil);
persons.add(alexis);
persons.add(julie);
System.out.println("Entire List:");
for (Person p : persons)
p.printPerson();
/* Original */
// Persons over 30:
// System.out.println("Older than 30:");
// printPersonsOlderThan(persons, 30);
// System.out.println("Between 18 and 40:");
// printPersonsAgeBetween(persons, 18, 40);
/* Lambda */
// Persons over 30:
// System.out.println("Older than 30:");
// Predicate over30 = p -> p.getAge() > 30;
// printPersonsWithCondition(persons, over30);
// System.out.println("Between 18 and 40:");
// printPersonsWithCondition(persons,
// p -> p.getAge() > 18 && p.getAge() < 40);
/* Stream */
// Names of persons over 30
System.out.println("Names of persons over 30:");
// Uses peek to check on our intermediate progress.
List outlist = persons.stream()
.filter(p -> p.getAge() > 30)
.peek(Person::printPerson)
.map(p -> p.getName())
.peek(System.out::println)
.collect(Collectors.toList());
}
}