import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
List<Student> members = new ArrayList<>();
members.add(new Student("P", Sex.MALE, 12, "p@g.com"));
members.add(new Student("J", Sex.MALE, 42, "j@g.com"));
members.add(new Student("K", Sex.FEMALE, 22, "k@g.com"));
members.add(new Student("L", Sex.FEMALE, 52, "l@g.com"));
for (Sex gender : Sex.values()) {
System.out.println("All " + gender + ":");
processMembersWithFunction(members,
p -> p.getGender() == gender,
Student::getName,
System.out::println);
}
System.out.println("All FEMALE over 30:");
processMembersWithFunction(members,
p -> p.getGender() == Sex.FEMALE && p.getAge() > 30,
Student::getName,
System.out::println);
}
public static void processMembersWithFunction(List<Student> roster,
Predicate<Student> tester, Function<Student, String> mapper,
Consumer<String> block) {
for (Student p : roster) {
if (tester.test(p)) {
String data = mapper.apply(p);
block.accept(data);
}
}
}
}
enum Sex {
MALE, FEMALE
}
class Student {
private final String name;
private final int age;
private final Sex gender;
private final String emailAddress;
public Student(String name, Sex gender, int age, String emailAddress) {
this.name = name;
this.gender = gender;
this.age = age;
this.emailAddress = emailAddress;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public Sex getGender() {
return gender;
}
public String getEmailAddress() {
return emailAddress;
}
}
運行結果如下: