From d849ca19aa8fa8458a19113597c6a07c28d14a7b Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Wed, 27 Nov 2019 17:36:38 -0500 Subject: [PATCH 01/10] Add logic to create person(s) --- looptest.iml | 8 ++++---- .../streams/anthropoid/PersonFactory.java | 13 ++++++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/looptest.iml b/looptest.iml index 7f2d304..792af39 100644 --- a/looptest.iml +++ b/looptest.iml @@ -10,10 +10,10 @@ - + - - - + + + \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java index a10ec7b..9b925a5 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java @@ -3,6 +3,8 @@ import com.zipcodewilmington.streams.tools.RandomUtils; import com.zipcodewilmington.streams.tools.StringUtils; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -39,7 +41,9 @@ public Person createRandomPerson() { * @return - ArrayList of Person objects */ // TODO public List createPersonList(int listSize) { - return null; + List result = new ArrayList<>(); + result.addAll(Arrays.asList(createPersonArray(listSize))); + return result; } @@ -48,7 +52,9 @@ public List createPersonList(int listSize) { * @return - Array of Person objects */ // TODO public Person[] createPersonArray(int arrayLength) { - return null; + Stream temp = createPersonStream(arrayLength); + Person [] result = temp.toArray(Person[]::new); + return result; } @@ -59,6 +65,7 @@ public Person[] createPersonArray(int arrayLength) { * @return - Stream representation of collection of Person objects */ // TODO public Stream createPersonStream(int streamCount) { - return null; + Stream personStream = Stream.generate(this :: createRandomPerson).limit(streamCount); + return personStream; } } From f9b430da8631c7b1b1927d6126e5741372dae7f0 Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Wed, 27 Nov 2019 17:58:17 -0500 Subject: [PATCH 02/10] Add logic to get names --- .../streams/anthropoid/PersonWarehouse.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java index a4960b1..4ad4cf4 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java @@ -36,7 +36,11 @@ public void addPerson(Person person) { * @return list of names of Person objects */ // TODO public List getNames() { - return null; + List names = new ArrayList<>(); + + people.stream().forEach(person -> names.add(person.getName())); + + return names; } @@ -87,6 +91,10 @@ public Stream getAllAliases() { return null; } + + + + // DO NOT MODIFY public Boolean contains(Person p) { return people.contains(p); From c4b30a6630b3ee647b33b06dabdc89b3b996a42e Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Fri, 29 Nov 2019 08:35:59 -0500 Subject: [PATCH 03/10] Add logic for it to name map --- .../streams/anthropoid/PersonWarehouse.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java index 4ad4cf4..05cf090 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java @@ -4,10 +4,7 @@ import com.zipcodewilmington.streams.tools.logging.LoggerHandler; import com.zipcodewilmington.streams.tools.logging.LoggerWarehouse; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -34,7 +31,7 @@ public void addPerson(Person person) { /** * @return list of names of Person objects - */ // TODO + */ public List getNames() { List names = new ArrayList<>(); @@ -48,7 +45,13 @@ public List getNames() { * @return list of uniquely named Person objects */ //TODO public Stream getUniquelyNamedPeople() { - return null; + List uniquelyNamedPeople = new ArrayList<>(); + + uniquelyNamedPeople = people.stream() + .distinct() + .collect(Collectors.toList()); + + return uniquelyNamedPeople.stream(); } @@ -70,9 +73,14 @@ public Stream getFirstNUniquelyNamedPeople(int n) { /** * @return a mapping of Person Id to the respective Person name - */ // TODO + */ public Map getIdToNameMap() { - return null; + Map idToNameMap = new HashMap<>(); + + idToNameMap = people.stream() + .collect(Collectors.toMap(Person::getPersonalId, Person::getName)); + + return idToNameMap; } From c4a88c423d90398b1e7a9b353bbd71279ba9e944 Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Fri, 29 Nov 2019 10:22:21 -0500 Subject: [PATCH 04/10] Add get unique by name --- .../streams/anthropoid/PersonWarehouse.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java index 05cf090..8b2c027 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java @@ -5,6 +5,10 @@ import com.zipcodewilmington.streams.tools.logging.LoggerWarehouse; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collector; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -33,9 +37,9 @@ public void addPerson(Person person) { * @return list of names of Person objects */ public List getNames() { - List names = new ArrayList<>(); - - people.stream().forEach(person -> names.add(person.getName())); + List names = people.stream() + .map(person -> person.getName()) // apply the function to each element in a stream + .collect(Collectors.toList()); return names; } @@ -43,17 +47,21 @@ public List getNames() { /** * @return list of uniquely named Person objects - */ //TODO + */ public Stream getUniquelyNamedPeople() { - List uniquelyNamedPeople = new ArrayList<>(); - uniquelyNamedPeople = people.stream() - .distinct() + List uniquelyNamedPeople = people.stream() + .filter(distinctByName(Person::getName)) .collect(Collectors.toList()); return uniquelyNamedPeople.stream(); } + public static Predicate distinctByName(Function keyExtractor) { + Set result = ConcurrentHashMap.newKeySet(); + return Person -> result.add(keyExtractor.apply(Person)); + + } /** * @param character starting character of Person objects' name From 2c1f06c85a32a9055692f9339f3c59385dc58b1e Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Fri, 29 Nov 2019 10:31:22 -0500 Subject: [PATCH 05/10] Add logic for names starting with character --- .../streams/anthropoid/PersonWarehouse.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java index 8b2c027..4df4b39 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java @@ -4,6 +4,7 @@ import com.zipcodewilmington.streams.tools.logging.LoggerHandler; import com.zipcodewilmington.streams.tools.logging.LoggerWarehouse; +import javax.imageio.plugins.jpeg.JPEGImageReadParam; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; @@ -66,9 +67,13 @@ public static Predicate distinctByName(Function getUniquelyNamedPeopleStartingWith(Character character) { - return null; + List uniqueNames = people.stream() + .filter(person -> person.getName().startsWith(character.toString())) + .collect(Collectors.toList()); + + return uniqueNames.stream(); } /** From e422cc32588b666dbba432e947db3c55e93ddc45 Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Fri, 29 Nov 2019 10:46:14 -0500 Subject: [PATCH 06/10] first n --- .../streams/anthropoid/PersonWarehouse.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java index 4df4b39..1a04c97 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java @@ -81,7 +81,13 @@ public Stream getUniquelyNamedPeopleStartingWith(Character character) { * @return a Stream of respective */ //TODO public Stream getFirstNUniquelyNamedPeople(int n) { - return null; + Stream uniquePeople = getUniquelyNamedPeople(); + + List firstUnique = uniquePeople.collect(Collectors.toList()).stream() + .limit(n) + .collect(Collectors.toList()); + + return firstUnique.stream(); } /** From 4fe008668cb56797da0d5d7348c60e29c8051e4d Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Fri, 29 Nov 2019 11:09:57 -0500 Subject: [PATCH 07/10] Add logic for array converter --- .../streams/conversions/ArrayConverter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java index 0a9d4d8..6f24c83 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java @@ -23,14 +23,14 @@ public ArrayConverter(int collectionSize) { .toArray(Person[]::new)); } - //TODO public List toList() { - return null; + + return Arrays.asList(toArray()); } - //TODO public Stream toStream() { - return null; + + return Arrays.stream(toArray()); } @Override From 8030b52ea8e8dc4d2df0de4cdc5ed8c90e75c57c Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Fri, 29 Nov 2019 11:26:51 -0500 Subject: [PATCH 08/10] Add logic for stream conveter --- .../streams/conversions/ListConverter.java | 7 +++++-- .../streams/conversions/StreamConverter.java | 8 +++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java index b64540b..afda15f 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java @@ -3,6 +3,7 @@ import com.zipcodewilmington.streams.anthropoid.Person; import com.zipcodewilmington.streams.anthropoid.PersonFactory; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -29,11 +30,13 @@ public List toList() { //TODO public Stream toStream() { - return null; + + return toList().stream(); } //TODO public Person[] toArray() { - return null; + + return toList().toArray(new Person[toList().size()]); } } diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java index 159d048..a0a687c 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java @@ -25,16 +25,18 @@ public StreamConverter(int collectionSize) { // TODO public List toList() { - return null; + return personList; } // TODO public Stream toStream() { - return null; + + return personList.stream(); } // TODO public Person[] toArray() { - return null; + + return toList().toArray(new Person[toList().size()]); } } From b47c182ced1d36136865abd009c5197d64206250 Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Fri, 29 Nov 2019 11:27:17 -0500 Subject: [PATCH 09/10] Add logic for stream conveter --- .../streams/conversions/StreamConverter.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java index a0a687c..2864782 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java @@ -23,18 +23,16 @@ public StreamConverter(int collectionSize) { .limit(collectionSize)); } - // TODO + public List toList() { return personList; } - // TODO public Stream toStream() { return personList.stream(); } - // TODO public Person[] toArray() { return toList().toArray(new Person[toList().size()]); From 685427f64bbaf3dabe1cf635f3a3c2f2fae0f4db Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Fri, 29 Nov 2019 12:04:47 -0500 Subject: [PATCH 10/10] Add logic for stream filter --- .../streams/StreamFilter.java | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/streams/StreamFilter.java b/src/main/java/com/zipcodewilmington/streams/StreamFilter.java index d8b89ae..056392f 100644 --- a/src/main/java/com/zipcodewilmington/streams/StreamFilter.java +++ b/src/main/java/com/zipcodewilmington/streams/StreamFilter.java @@ -20,23 +20,28 @@ public class StreamFilter { * No arg constructor */ //TODO - construct person stream of 100 person objects; startingCharacter is a random capital letter public StreamFilter() { - this(Stream.empty(), null); + this.personStream = new PersonFactory().createPersonStream(100); + this.startingCharacter = RandomUtils.createCharacter('A','Z').toString(); } /** * @param people - Array of person objects * @param startingCharacter - character to filter by - */ //TODO + */ public StreamFilter(Person[] people, Character startingCharacter) { - this(Stream.empty(), null); + + this.personStream = Stream.of(people); + this.startingCharacter = startingCharacter.toString(); } /** * @param people - List of person objects * @param startingCharacter - character to filter by - */ //TODO + */ public StreamFilter(List people, Character startingCharacter) { - this(Stream.empty(), null); + + this.personStream = people.stream(); + this.startingCharacter = startingCharacter.toString(); } @@ -53,36 +58,46 @@ public StreamFilter(Stream people, Character startingCharacter) { /** * Using multi-line lambda syntax * @return a list of person object whose name starts with `this.startingCharacter` - */ //TODO + */ public List toListMultiLine() { - return null; + + return this.personStream + .filter(person -> person.getName() + .startsWith(this.startingCharacter)) + .collect(Collectors.toList()); } /** * Using one-line lambda syntax * @return a list of person objects whose name starts with `this.startingCharacter` - */ //TODO + */ public List toListOneLine() { - return null; + + return toListMultiLine(); } /** * Using one-line lambda syntax * @return an array of person object whose name starts with `this.startingCharacter` - */ //TODO + */ public Person[] toArrayOneLine() { - return null; + + return toArrayMultiLine(); } /** * Using multi-line lambda syntax * @return an array of person object whose name starts with `this.startingCharacter` - */ //TODO + */ public Person[] toArrayMultiLine() { - return null; + + return this.personStream + .filter(person -> person.getName() + .startsWith(this.startingCharacter)) + .toArray(Person[]::new); } }