diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/Lambdas2-ZCW.iml b/.idea/Lambdas2-ZCW.iml
new file mode 100644
index 0000000..dd1d637
--- /dev/null
+++ b/.idea/Lambdas2-ZCW.iml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..1efcc24
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_10.xml b/.idea/libraries/Maven__junit_junit_4_10.xml
new file mode 100644
index 0000000..ed8bf5f
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml
new file mode 100644
index 0000000..acdf443
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..3210399
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..e080e35
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..3ac47d5
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,30 @@
+
+
+ 4.0.0
+
+ groupId
+ Lambdas2-ZCW
+ 1.0-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
+
+
+
+
+ junit
+ junit
+ 4.10
+
+
+
\ No newline at end of file
diff --git a/src/main/java/CheckFemale.java b/src/main/java/CheckFemale.java
new file mode 100644
index 0000000..f6e1e29
--- /dev/null
+++ b/src/main/java/CheckFemale.java
@@ -0,0 +1,6 @@
+public interface CheckFemale extends CheckPerson{
+ @Override
+ default boolean test(Person p) {
+ return p.getGender()== Person.Sex.FEMALE;
+ }
+}
diff --git a/src/main/java/CheckMale.java b/src/main/java/CheckMale.java
new file mode 100644
index 0000000..a0ef7a8
--- /dev/null
+++ b/src/main/java/CheckMale.java
@@ -0,0 +1,6 @@
+public class CheckMale implements CheckPerson{
+ @Override
+ public boolean test(Person p) {
+ return p.getGender() == Person.Sex.MALE ;
+ }
+}
diff --git a/src/main/java/CheckMaleOlderThan21.java b/src/main/java/CheckMaleOlderThan21.java
new file mode 100644
index 0000000..1f05d41
--- /dev/null
+++ b/src/main/java/CheckMaleOlderThan21.java
@@ -0,0 +1,6 @@
+public class CheckMaleOlderThan21 implements CheckPerson{
+ @Override
+ public boolean test(Person p) {
+ return p.getGender() == Person.Sex.MALE && p.getAge()>21;
+ }
+}
diff --git a/src/main/java/CheckPerson.java b/src/main/java/CheckPerson.java
new file mode 100644
index 0000000..d45ac74
--- /dev/null
+++ b/src/main/java/CheckPerson.java
@@ -0,0 +1,8 @@
+public interface CheckPerson {
+
+ boolean test(Person p);
+
+// boolean testFemale();
+
+
+}
diff --git a/src/main/java/Person.java b/src/main/java/Person.java
new file mode 100644
index 0000000..6de20eb
--- /dev/null
+++ b/src/main/java/Person.java
@@ -0,0 +1,80 @@
+import java.time.LocalDate;
+import java.time.Period;
+import java.util.Date;
+import java.util.function.Predicate;
+
+public class Person {
+
+ String name;
+ LocalDate birthday;
+ Sex gender;
+ String emailAddress;
+
+ public Person(String name, Sex sex, LocalDate birthday, String emailAddress) {
+ this.name = name;
+ this.gender= sex;
+ this.birthday = birthday;
+ this.emailAddress = emailAddress;
+ }
+
+ public enum Sex {
+ MALE, FEMALE
+ }
+
+
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public LocalDate getBirthday() {
+ return birthday;
+ }
+
+ public void setBirthday(LocalDate birthday) {
+ this.birthday = birthday;
+ }
+
+ public Sex getGender() {
+ return gender;
+ }
+
+ public void setGender(Sex gender) {
+ this.gender = gender;
+ }
+
+ public String getEmailAddress() {
+ return emailAddress;
+ }
+
+ public void setEmailAddress(String emailAddress) {
+ this.emailAddress = emailAddress;
+ }
+
+ public int getAge() {
+ LocalDate today = LocalDate.now();
+ Period diff = Period.between(birthday, today);
+ return diff.getYears();
+ }
+
+ public void printPerson() {
+ String person = this.toString();
+ System.out.println(person);
+ }
+
+
+
+ @Override
+ public String toString() {
+ return "Person{" +
+ "name='" + name + '\'' +
+ ", birthday=" + birthday +
+ ", gender=" + gender +
+ ", emailAddress='" + emailAddress + '\'' +
+ '}';
+ }
+}
diff --git a/src/main/java/PersonBuilder.java b/src/main/java/PersonBuilder.java
new file mode 100644
index 0000000..8bbee12
--- /dev/null
+++ b/src/main/java/PersonBuilder.java
@@ -0,0 +1,32 @@
+import java.time.LocalDate;
+
+public class PersonBuilder {
+ private String name;
+ private Person.Sex sex;
+ private LocalDate birthday = LocalDate.of(1990, 1, 1);
+ private String emailAddress;
+
+ public PersonBuilder setName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public PersonBuilder setSex(Person.Sex sex) {
+ this.sex = sex;
+ return this;
+ }
+
+ public PersonBuilder setBirthday(LocalDate birthday) {
+ this.birthday = birthday;
+ return this;
+ }
+
+ public PersonBuilder setEmailAddress(String emailAddress) {
+ this.emailAddress = emailAddress;
+ return this;
+ }
+
+ public Person createPerson() {
+ return new Person(name, sex, birthday, emailAddress);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/SocialApp.java b/src/main/java/SocialApp.java
new file mode 100644
index 0000000..ccc44c3
--- /dev/null
+++ b/src/main/java/SocialApp.java
@@ -0,0 +1,80 @@
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Predicate;
+
+public class SocialApp{
+
+ List roster = new ArrayList<>();
+
+
+ public List getList() {
+ return roster;
+ }
+
+
+ interface Checker extends CheckPerson {
+
+ boolean test(Person p);
+
+
+ static boolean testMale(Person p){
+ return p.getGender() == Person.Sex.MALE;
+ }
+
+ static boolean testFemale(Person p){
+ return p.getGender()== Person.Sex.FEMALE;
+ }
+ }
+
+
+
+ public void addUser(Person user){
+ roster.add(user);
+ }
+
+ public static void printPersonsOlderThan(List roster, int age) {
+ Predicate checkAge = p -> p.getAge() > age;
+ roster.stream().filter(checkAge).forEach(Person::printPerson);
+ }
+
+ public static void printPersonsWithinAgeRange(List roster, int low, int high) {
+ Predicate range = p -> low <= p.getAge() && p.getAge() < high;
+ roster.stream().filter(range).forEach(Person::printPerson);
+ }
+
+ public static void printPersonsFemale( List roster
+// List roster, Checker tester
+ ) {
+ Predicate checkFem = Checker::testFemale;
+ roster.stream().filter(checkFem).forEach(Person::printPerson);
+ }
+
+ public static void printMales21AndUp(List roster){
+ Predicate checkMale = Checker::testMale;
+ Predicate checkAge = p-> p.getAge() > 21;
+
+ roster.stream().filter(checkMale).filter(checkAge).forEach(Person::printPerson);
+ }
+
+ public static void printFemales21AndUp(List roster){
+ Predicate checkMale = Checker::testFemale;
+ Predicate checkAge = p-> p.getAge() > 21;
+
+ roster.stream().filter(checkMale).filter(checkAge).forEach(Person::printPerson);
+ }
+
+ public static void printFemalesBetweenAges(List roster, int low, int high){
+ Predicate checkFem = Checker::testFemale;
+ Predicate range = p -> low <= p.getAge() && p.getAge() < high;
+ roster.stream().filter(checkFem).filter(range).forEach(Person::printPerson);
+
+ }
+
+ public static void printMalesBetweenAges(List roster, int low, int high){
+ Predicate checkMale = Checker::testMale;
+ Predicate range = p -> low <= p.getAge() && p.getAge() < high;
+ roster.stream().filter(checkMale).filter(range).forEach(Person::printPerson);
+
+ }
+
+}
diff --git a/src/test/java/PersonTest.java b/src/test/java/PersonTest.java
new file mode 100644
index 0000000..1d76cf7
--- /dev/null
+++ b/src/test/java/PersonTest.java
@@ -0,0 +1,26 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.time.LocalDate;
+
+public class PersonTest {
+
+ @Test
+ public void getAgeTest(){
+ //given
+ String name = "Roy";
+ Person.Sex sex = Person.Sex.MALE;
+ LocalDate birthday = LocalDate.of(1994,03, 04);
+ String emailaddress = "me@whatever.com";
+ Person person = new PersonBuilder().setName(name).setSex(sex).setBirthday(birthday).setEmailAddress(emailaddress).createPerson();
+ int expected = 27;
+
+ //when
+ int actual = person.getAge();
+
+ //then
+ Assert.assertEquals(expected, actual);
+
+
+ }
+}
diff --git a/src/test/java/SocialAppTest.java b/src/test/java/SocialAppTest.java
new file mode 100644
index 0000000..1a9f87f
--- /dev/null
+++ b/src/test/java/SocialAppTest.java
@@ -0,0 +1,200 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.time.LocalDate;
+
+public class SocialAppTest {
+
+ @Test
+ public void addUserTest() {
+ //given
+ SocialApp app = new SocialApp();
+ String name = "Roy";
+ Person.Sex sex = Person.Sex.MALE;
+ LocalDate birthday = LocalDate.of(1994, 03, 04);
+ String emailaddress = "me@whatever.com";
+ Person user = new PersonBuilder().setName(name).setSex(sex).setBirthday(birthday).setEmailAddress(emailaddress).createPerson();
+
+ //when
+ app.addUser(user);
+ int actual = app.roster.size();
+
+ //then
+ Assert.assertEquals(1, actual);
+
+ }
+
+ @Test
+ public void filterByAgeOlderThanTest (){
+ //given
+ SocialApp app = new SocialApp();
+ String name = "Roy";
+ Person.Sex sex = Person.Sex.MALE;
+ LocalDate birthday = LocalDate.of(1994, 03, 04);
+ String emailaddress = "me@whatever.com";
+ Person user1 = new PersonBuilder().setName(name).setSex(sex).setBirthday(birthday).setEmailAddress(emailaddress).createPerson();
+ Person user2 = new PersonBuilder().setName("Jim").setSex(Person.Sex.MALE).setBirthday(LocalDate.of(1987, 10, 13)).setEmailAddress(emailaddress).createPerson();
+
+
+ //when
+ app.addUser(user1);
+ app.addUser(user2);
+ int actual = app.roster.size();
+
+
+ //then
+ Assert.assertEquals(2, actual);
+ app.printPersonsOlderThan(app.getList(), 21);
+ }
+ @Test
+ public void filterByRange(){
+ //given
+ SocialApp app = new SocialApp();
+ String name = "Roy";
+ Person.Sex sex = Person.Sex.MALE;
+ LocalDate birthday = LocalDate.of(1994, 03, 04);
+ String emailaddress = "me@whatever.com";
+ Person user1 = new PersonBuilder().setName(name).setSex(sex).setBirthday(birthday).setEmailAddress(emailaddress).createPerson();
+ Person user2 = new PersonBuilder().setName("Jim").setSex(Person.Sex.MALE).setBirthday(LocalDate.of(1987, 10, 13)).setEmailAddress(emailaddress).createPerson();
+ Person user3 = new PersonBuilder().setName("Pam").setSex(Person.Sex.FEMALE).createPerson();
+
+ //when
+ app.addUser(user1);
+ app.addUser(user2);
+ app.addUser(user3);
+ int actual = app.roster.size();
+
+ //then
+ Assert.assertEquals(3, actual);
+ app.printPersonsWithinAgeRange(app.getList(), 30, 40);
+
+ }
+
+ @Test
+ public void filterByGender(){
+ //given
+ SocialApp app = new SocialApp();
+ String name = "Roy";
+ Person.Sex sex = Person.Sex.MALE;
+ LocalDate birthday = LocalDate.of(1994, 03, 04);
+ String emailaddress = "me@whatever.com";
+ Person user1 = new PersonBuilder().setName(name).setSex(sex).setBirthday(birthday).setEmailAddress(emailaddress).createPerson();
+ Person user2 = new PersonBuilder().setName("Jim").setSex(Person.Sex.MALE).setBirthday(LocalDate.of(1987, 10, 13)).setEmailAddress(emailaddress).createPerson();
+ Person user3 = new PersonBuilder().setName("Pam").setSex(Person.Sex.FEMALE).createPerson();
+
+ //when
+ app.addUser(user1);
+ app.addUser(user2);
+ app.addUser(user3);
+ int actual = app.roster.size();
+
+ //then
+ Assert.assertEquals(3, actual);
+ app.printPersonsFemale(app.getList());
+
+ }
+
+ @Test
+ public void filterByMaleGenderAndAge(){
+ //given
+ SocialApp app = new SocialApp();
+ String name = "Roy";
+ Person.Sex sex = Person.Sex.MALE;
+ LocalDate birthday = LocalDate.of(1994, 03, 04);
+ String emailaddress = "me@whatever.com";
+ Person user1 = new PersonBuilder().setName(name).setSex(sex).setBirthday(birthday).setEmailAddress(emailaddress).createPerson();
+ Person user2 = new PersonBuilder().setName("Jim").setSex(Person.Sex.MALE).setBirthday(LocalDate.of(1987, 10, 13)).setEmailAddress(emailaddress).createPerson();
+ Person user3 = new PersonBuilder().setName("Pam").setSex(Person.Sex.FEMALE).createPerson();
+
+ //when
+ app.addUser(user1);
+ app.addUser(user2);
+ app.addUser(user3);
+ int actual = app.roster.size();
+
+ //then
+ Assert.assertEquals(3, actual);
+ app.printMales21AndUp(app.getList());
+
+ }
+ @Test
+ public void filterbyFemaleGenderAndAge() {
+ //given
+ SocialApp app = new SocialApp();
+ String name = "Roy";
+ Person.Sex sex = Person.Sex.MALE;
+ LocalDate birthday = LocalDate.of(1994, 03, 04);
+ String emailaddress = "me@whatever.com";
+ Person user1 = new PersonBuilder().setName(name).setSex(sex).setBirthday(birthday).setEmailAddress(emailaddress).createPerson();
+ Person user2 = new PersonBuilder().setName("Jim").setSex(Person.Sex.MALE).setBirthday(LocalDate.of(1987, 10, 13)).setEmailAddress(emailaddress).createPerson();
+ Person user3 = new PersonBuilder().setName("Pam").setSex(Person.Sex.FEMALE).createPerson();
+
+ //when
+ app.addUser(user1);
+ app.addUser(user2);
+ app.addUser(user3);
+ int actual = app.roster.size();
+
+ //then
+ Assert.assertEquals(3, actual);
+ app.printFemales21AndUp(app.getList());
+
+ }
+
+ @Test
+ public void filterFemaleByAgeRange() {
+ //given
+ SocialApp app = new SocialApp();
+ String name = "Roy";
+ Person.Sex sex = Person.Sex.MALE;
+ LocalDate birthday = LocalDate.of(1994, 03, 04);
+ String emailaddress = "me@whatever.com";
+ Person user1 = new PersonBuilder().setName(name).setSex(sex).setBirthday(birthday).setEmailAddress(emailaddress).createPerson();
+ Person user2 = new PersonBuilder().setName("Jim").setSex(Person.Sex.MALE).setBirthday(LocalDate.of(1987, 10, 13)).setEmailAddress(emailaddress).createPerson();
+ Person user3 = new PersonBuilder().setName("Pam").setSex(Person.Sex.FEMALE).createPerson();
+ Person user4 = new PersonBuilder().setName("Julie").setBirthday(LocalDate.of(1996, 11, 13)).setSex(Person.Sex.FEMALE).createPerson();
+ Person user5 = new PersonBuilder().setName("Charlene").setBirthday(LocalDate.of(2002, 1, 20)).setEmailAddress("baddie2002@addme.com").setSex(Person.Sex.FEMALE).createPerson();
+
+ //when
+ app.addUser(user1);
+ app.addUser(user2);
+ app.addUser(user3);
+ app.addUser(user4);
+ app.addUser(user5);
+ int actual = app.roster.size();
+
+ //then
+ Assert.assertEquals(5, actual);
+ app.printFemalesBetweenAges(app.getList(), 18, 29);
+
+ }
+
+ @Test
+ public void filterMaleByAgeRange() {
+ //given
+ SocialApp app = new SocialApp();
+ String name = "Roy";
+ Person.Sex sex = Person.Sex.MALE;
+ LocalDate birthday = LocalDate.of(1994, 03, 04);
+ String emailaddress = "me@whatever.com";
+ Person user1 = new PersonBuilder().setName(name).setSex(sex).setBirthday(birthday).setEmailAddress(emailaddress).createPerson();
+ Person user2 = new PersonBuilder().setName("Jim").setSex(Person.Sex.MALE).setBirthday(LocalDate.of(1987, 10, 13)).setEmailAddress(emailaddress).createPerson();
+ Person user3 = new PersonBuilder().setName("Pam").setSex(Person.Sex.FEMALE).createPerson();
+ Person user4 = new PersonBuilder().setName("Michael").setBirthday(LocalDate.of(1996, 11, 13)).setSex(Person.Sex.MALE).createPerson();
+ Person user5 = new PersonBuilder().setName("Charles").setBirthday(LocalDate.of(2000, 1, 20)).setEmailAddress("cmoney@banks.com").setSex(Person.Sex.MALE).createPerson();
+
+ //when
+ app.addUser(user1);
+ app.addUser(user2);
+ app.addUser(user3);
+ app.addUser(user4);
+ app.addUser(user5);
+ int actual = app.roster.size();
+
+ //then
+ Assert.assertEquals(5, actual);
+ app.printMalesBetweenAges(app.getList(), 21, 35);
+
+ }
+
+}
diff --git a/target/classes/CheckFemale.class b/target/classes/CheckFemale.class
new file mode 100644
index 0000000..b98e290
Binary files /dev/null and b/target/classes/CheckFemale.class differ
diff --git a/target/classes/CheckMale.class b/target/classes/CheckMale.class
new file mode 100644
index 0000000..9bf67a5
Binary files /dev/null and b/target/classes/CheckMale.class differ
diff --git a/target/classes/CheckMaleOlderThan21.class b/target/classes/CheckMaleOlderThan21.class
new file mode 100644
index 0000000..dc3a2e3
Binary files /dev/null and b/target/classes/CheckMaleOlderThan21.class differ
diff --git a/target/classes/CheckPerson.class b/target/classes/CheckPerson.class
new file mode 100644
index 0000000..4516817
Binary files /dev/null and b/target/classes/CheckPerson.class differ
diff --git a/target/classes/Person$Sex.class b/target/classes/Person$Sex.class
new file mode 100644
index 0000000..22d8375
Binary files /dev/null and b/target/classes/Person$Sex.class differ
diff --git a/target/classes/Person.class b/target/classes/Person.class
new file mode 100644
index 0000000..4905bef
Binary files /dev/null and b/target/classes/Person.class differ
diff --git a/target/classes/PersonBuilder.class b/target/classes/PersonBuilder.class
new file mode 100644
index 0000000..757b23b
Binary files /dev/null and b/target/classes/PersonBuilder.class differ
diff --git a/target/classes/SocialApp$Checker.class b/target/classes/SocialApp$Checker.class
new file mode 100644
index 0000000..10dd83e
Binary files /dev/null and b/target/classes/SocialApp$Checker.class differ
diff --git a/target/classes/SocialApp.class b/target/classes/SocialApp.class
new file mode 100644
index 0000000..49282aa
Binary files /dev/null and b/target/classes/SocialApp.class differ
diff --git a/target/test-classes/PersonTest.class b/target/test-classes/PersonTest.class
new file mode 100644
index 0000000..42cad47
Binary files /dev/null and b/target/test-classes/PersonTest.class differ
diff --git a/target/test-classes/SocialAppTest.class b/target/test-classes/SocialAppTest.class
new file mode 100644
index 0000000..bf149e0
Binary files /dev/null and b/target/test-classes/SocialAppTest.class differ