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