From b76e1bf3f63fd970ff79b0a3de33baea53966371 Mon Sep 17 00:00:00 2001 From: Brian Patterson Date: Sat, 23 Nov 2019 19:27:34 -0500 Subject: [PATCH] Completed --- looptest.iml | 8 ++-- .../streams/StreamFilter.java | 18 +++++---- .../zipcodewilmington/streams/StreamMap.java | 9 +++-- .../streams/anthropoid/PersonFactory.java | 7 ++-- .../streams/anthropoid/PersonWarehouse.java | 39 +++++++++++++------ .../streams/conversions/ArrayConverter.java | 4 +- .../streams/conversions/ListConverter.java | 6 +-- .../streams/conversions/StreamConverter.java | 8 ++-- .../anthropoid/TestPersonWarehouse.java | 1 - .../anthropoid/TestUniquelyNamedPersons.java | 1 + 10 files changed, 64 insertions(+), 37 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/StreamFilter.java b/src/main/java/com/zipcodewilmington/streams/StreamFilter.java index d8b89ae..76dcdda 100644 --- a/src/main/java/com/zipcodewilmington/streams/StreamFilter.java +++ b/src/main/java/com/zipcodewilmington/streams/StreamFilter.java @@ -5,6 +5,7 @@ import com.zipcodewilmington.streams.tools.RandomUtils; import com.zipcodewilmington.streams.tools.StringUtils; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -20,7 +21,7 @@ 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(new PersonFactory().createPersonList(100), RandomUtils.createCharacter('A', 'Z')); } /** @@ -28,7 +29,8 @@ public StreamFilter() { * @param startingCharacter - character to filter by */ //TODO public StreamFilter(Person[] people, Character startingCharacter) { - this(Stream.empty(), null); + this.personStream = Arrays.stream(people); + this.startingCharacter = startingCharacter.toString(); } /** @@ -36,7 +38,8 @@ public StreamFilter(Person[] people, Character startingCharacter) { * @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(); } @@ -55,7 +58,7 @@ public StreamFilter(Stream people, Character startingCharacter) { * @return a list of person object whose name starts with `this.startingCharacter` */ //TODO public List toListMultiLine() { - return null; + return this.personStream.filter(z -> z.getName()==startingCharacter).collect(Collectors.toList()); } @@ -64,16 +67,17 @@ public List toListMultiLine() { * @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 toListMultiLine().toArray(new Person[0]); } @@ -82,7 +86,7 @@ public Person[] toArrayOneLine() { * @return an array of person object whose name starts with `this.startingCharacter` */ //TODO public Person[] toArrayMultiLine() { - return null; + return toArrayOneLine(); } } diff --git a/src/main/java/com/zipcodewilmington/streams/StreamMap.java b/src/main/java/com/zipcodewilmington/streams/StreamMap.java index cf35024..84f4fd3 100644 --- a/src/main/java/com/zipcodewilmington/streams/StreamMap.java +++ b/src/main/java/com/zipcodewilmington/streams/StreamMap.java @@ -5,6 +5,8 @@ import java.util.Arrays; import java.util.List; +import java.util.Objects; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -18,7 +20,8 @@ public class StreamMap { * @return - a Stream of single characters */ //TODO public static Stream letters(String someWord) { - return null; + //return someWord.codePoints().mapToObj(c->String.valueOf((char) c)); + return Stream.of(someWord.toCharArray()).map(Object::toString); } /** @@ -26,7 +29,7 @@ public static Stream letters(String someWord) { * @return - a Stream of several Streams of single characters */ //TODO public static Stream> wordsMap(String... someWords) { - return null; + return Stream.of(someWords).map(StreamMap::letters); } /** @@ -34,6 +37,6 @@ public static Stream> wordsMap(String... someWords) { * @return - a Stream of several Streams of single characters */ //TODO public static Stream wordsFlatMap(String... stringArray) { - return null; + return wordsMap().flatMap(Function.identity()); } } \ 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..12b614e 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java @@ -3,6 +3,7 @@ import com.zipcodewilmington.streams.tools.RandomUtils; import com.zipcodewilmington.streams.tools.StringUtils; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -39,7 +40,7 @@ public Person createRandomPerson() { * @return - ArrayList of Person objects */ // TODO public List createPersonList(int listSize) { - return null; + return Stream.generate(this::createRandomPerson).limit(listSize).collect(Collectors.toList()); } @@ -48,7 +49,7 @@ public List createPersonList(int listSize) { * @return - Array of Person objects */ // TODO public Person[] createPersonArray(int arrayLength) { - return null; + return Stream.generate(this::createRandomPerson).limit(arrayLength).toArray(Person[]::new); } @@ -59,6 +60,6 @@ public Person[] createPersonArray(int arrayLength) { * @return - Stream representation of collection of Person objects */ // TODO public Stream createPersonStream(int streamCount) { - return null; + return Stream.generate(this::createRandomPerson).limit(streamCount); } } diff --git a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java index a4960b1..372e423 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java @@ -4,10 +4,10 @@ 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.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -36,7 +36,9 @@ public void addPerson(Person person) { * @return list of names of Person objects */ // TODO public List getNames() { - return null; + return people.stream().map(Person::getName).collect(Collectors.toList()); + + } @@ -44,16 +46,28 @@ public List getNames() { * @return list of uniquely named Person objects */ //TODO public Stream getUniquelyNamedPeople() { - return null; + Set set=new HashSet<>(people.size()); + return people.stream().filter(p -> set.add(p.getName())); + } + + + public static Predicate distinctByKey(Function keyExtractor) + { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + /** * @param character starting character of Person objects' name * @return a Stream of respective */ //TODO public Stream getUniquelyNamedPeopleStartingWith(Character character) { - return null; + return getUniquelyNamedPeople() + .filter(x -> x.getName().startsWith(character.toString())); + } /** @@ -61,14 +75,15 @@ public Stream getUniquelyNamedPeopleStartingWith(Character character) { * @return a Stream of respective */ //TODO public Stream getFirstNUniquelyNamedPeople(int n) { - return null; + return getUniquelyNamedPeople().limit(n); } /** * @return a mapping of Person Id to the respective Person name */ // TODO public Map getIdToNameMap() { - return null; + return people.stream().collect(Collectors.toMap(Person::getPersonalId,Person::getName)); + } @@ -76,7 +91,8 @@ public Map getIdToNameMap() { * @return Stream of Stream of Aliases */ // TODO public Stream> getNestedAliases() { - return null; + return people.stream().map(x -> Arrays.stream(x.getAliases())); + } @@ -84,7 +100,7 @@ public Stream> getNestedAliases() { * @return Stream of all Aliases */ // TODO public Stream getAllAliases() { - return null; + return getNestedAliases().flatMap(Function.identity()); } // DO NOT MODIFY @@ -106,4 +122,5 @@ public int size() { public Iterator iterator() { return people.iterator(); } + } diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java index 0a9d4d8..eb130da 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java @@ -25,12 +25,12 @@ public ArrayConverter(int collectionSize) { //TODO public List toList() { - return null; + return Arrays.asList(super.objectSequence); } //TODO public Stream toStream() { - return null; + return toList().stream(); } @Override diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java index b64540b..ee6805f 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.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -29,11 +30,10 @@ public List toList() { //TODO public Stream toStream() { - return null; + return toList().stream(); } - //TODO public Person[] toArray() { - return null; + return toList().toArray(new Person[0]); } } diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java index 159d048..9bc27ea 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.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; @@ -25,16 +26,17 @@ 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[0]); + } } diff --git a/src/test/java/com/zipcodewilmington/streams/anthropoid/TestPersonWarehouse.java b/src/test/java/com/zipcodewilmington/streams/anthropoid/TestPersonWarehouse.java index 25caaf9..acc2712 100644 --- a/src/test/java/com/zipcodewilmington/streams/anthropoid/TestPersonWarehouse.java +++ b/src/test/java/com/zipcodewilmington/streams/anthropoid/TestPersonWarehouse.java @@ -73,7 +73,6 @@ public void testGetNames() { for (Person person : warehouse) { localNames.add(person.getName()); } - Assert.assertEquals(localNames.toString(), warehouseNames.toString()); } } diff --git a/src/test/java/com/zipcodewilmington/streams/anthropoid/TestUniquelyNamedPersons.java b/src/test/java/com/zipcodewilmington/streams/anthropoid/TestUniquelyNamedPersons.java index 247c1ae..f1035b4 100644 --- a/src/test/java/com/zipcodewilmington/streams/anthropoid/TestUniquelyNamedPersons.java +++ b/src/test/java/com/zipcodewilmington/streams/anthropoid/TestUniquelyNamedPersons.java @@ -39,6 +39,7 @@ public void testGetUniquelyNamedPeople() { // then List expectedList = this.deriveUniqueNames(warehouse); + System.out.println( warehouse.getNestedAliases()); Assert.assertEquals(expectedList.toString(), actualList.toString()); }