From d3f2934416c89eb2d437d7909dc972bafe5e7f66 Mon Sep 17 00:00:00 2001 From: John Tokhi <56596400+tokhij@users.noreply.github.com> Date: Sun, 24 Nov 2019 19:28:31 -0500 Subject: [PATCH] needs to pass tests --- looptest.iml | 8 ++-- .../streams/StreamFilter.java | 17 ++++---- .../zipcodewilmington/streams/StreamMap.java | 7 ++-- .../streams/anthropoid/PersonFactory.java | 14 +++---- .../streams/anthropoid/PersonWarehouse.java | 41 +++++++++---------- .../streams/conversions/ArrayConverter.java | 13 +++--- .../streams/conversions/ListConverter.java | 13 +++--- .../streams/conversions/StreamConverter.java | 13 +++--- 8 files changed, 66 insertions(+), 60 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..42b2916 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(Stream.generate(PersonFactory::createRandomPerson).limit(100), RandomUtils.createCharacter('A','Z')); } /** @@ -28,7 +29,7 @@ public StreamFilter() { * @param startingCharacter - character to filter by */ //TODO public StreamFilter(Person[] people, Character startingCharacter) { - this(Stream.empty(), null); + this(Arrays.stream(people), startingCharacter); } /** @@ -36,7 +37,7 @@ public StreamFilter(Person[] people, Character startingCharacter) { * @param startingCharacter - character to filter by */ //TODO public StreamFilter(List people, Character startingCharacter) { - this(Stream.empty(), null); + this(people.stream(), startingCharacter); } @@ -55,7 +56,8 @@ public StreamFilter(Stream people, Character startingCharacter) { * @return a list of person object whose name starts with `this.startingCharacter` */ //TODO public List toListMultiLine() { - return null; + Stream zanJi = personStream.filter(person -> startingCharacter.equals(person.getName().charAt(0))); + return zanJi.collect(Collectors.toList()); } @@ -64,7 +66,7 @@ public List toListMultiLine() { * @return a list of person objects whose name starts with `this.startingCharacter` */ //TODO public List toListOneLine() { - return null; + return personStream.filter(person -> startingCharacter.equals(person.getName().charAt(0))).collect(Collectors.toList()); } @@ -73,7 +75,7 @@ public List toListOneLine() { * @return an array of person object whose name starts with `this.startingCharacter` */ //TODO public Person[] toArrayOneLine() { - return null; + return personStream.filter(person -> startingCharacter.equals(person.getName().charAt(0))).toArray(Person[]::new); } @@ -82,7 +84,8 @@ public Person[] toArrayOneLine() { * @return an array of person object whose name starts with `this.startingCharacter` */ //TODO public Person[] toArrayMultiLine() { - return null; + Stream zanJi = personStream.filter(person -> startingCharacter.equalsIgnoreCase(person.getName().substring(0,0))); + return zanJi.toArray(Person[]::new); } } diff --git a/src/main/java/com/zipcodewilmington/streams/StreamMap.java b/src/main/java/com/zipcodewilmington/streams/StreamMap.java index cf35024..2c62b9b 100644 --- a/src/main/java/com/zipcodewilmington/streams/StreamMap.java +++ b/src/main/java/com/zipcodewilmington/streams/StreamMap.java @@ -18,7 +18,8 @@ public class StreamMap { * @return - a Stream of single characters */ //TODO public static Stream letters(String someWord) { - return null; + String[] newOne = someWord.split(""); + return Stream.of(newOne); } /** @@ -26,7 +27,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(s -> letters(s)); } /** @@ -34,6 +35,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 Stream.of(stringArray).flatMap(s -> letters(s)); } } \ 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..b320397 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java @@ -21,7 +21,7 @@ public PersonFactory() { /** * @return a new instance of a person with fields of random values */ - public Person createRandomPerson() { + public static Person createRandomPerson() { String name = StringUtils.capitalizeFirstChar(RandomUtils.createString('a', 'e', 3)); String[] aliases = RandomUtils.createStrings('a', 'z', 3, 5); boolean isMale = RandomUtils.createBoolean(50); @@ -38,8 +38,8 @@ public Person createRandomPerson() { * @param listSize - number of Person objects to create * @return - ArrayList of Person objects */ // TODO - public List createPersonList(int listSize) { - return null; + public static List createPersonList(int listSize) { + return createPersonStream(listSize).collect(Collectors.toList()); } @@ -47,8 +47,8 @@ public List createPersonList(int listSize) { * @param arrayLength - number of Person objects to create * @return - Array of Person objects */ // TODO - public Person[] createPersonArray(int arrayLength) { - return null; + public static Person[] createPersonArray(int arrayLength) { + return createPersonStream(arrayLength).toArray(Person[]::new); } @@ -58,7 +58,7 @@ public Person[] createPersonArray(int arrayLength) { * @param streamCount - number of Person objects to create * @return - Stream representation of collection of Person objects */ // TODO - public Stream createPersonStream(int streamCount) { - return null; + public static Stream createPersonStream(int streamCount) { + return Stream.generate(PersonFactory::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..0bd1995 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; @@ -18,14 +15,14 @@ * @ATTENTION_TO_STUDENTS You are FORBIDDEN from using loops of any sort within the definition of this class. */ public final class PersonWarehouse implements Iterable { - private final LoggerHandler loggerHandler = LoggerWarehouse.getLogger(PersonWarehouse.class); - private final List people = new ArrayList<>(); + private static final LoggerHandler loggerHandler = LoggerWarehouse.getLogger(PersonWarehouse.class); + private static final List people = new ArrayList<>(); /** * @param person the Person object to add to the warehouse * @ATTENTION_TO_STUDENTS You are FORBIDDEN from modifying this method */ - public void addPerson(Person person) { + public static void addPerson(Person person) { loggerHandler.disbalePrinting(); loggerHandler.info("Registering a new person object to the person warehouse..."); loggerHandler.info(ReflectionUtils.getFieldMap(person).toString()); @@ -35,16 +32,17 @@ public void addPerson(Person person) { /** * @return list of names of Person objects */ // TODO - public List getNames() { - return null; + public static List getNames() { + return people.stream().map(Person::getName).collect(Collectors.toList()); } /** * @return list of uniquely named Person objects */ //TODO - public Stream getUniquelyNamedPeople() { - return null; + public static Stream getUniquelyNamedPeople() { + Map newMap = people.stream().collect(Collectors.toMap(Person::getName, person1 -> person1, (a , b) -> a)); + return newMap.values().stream(); } @@ -52,39 +50,40 @@ public Stream getUniquelyNamedPeople() { * @param character starting character of Person objects' name * @return a Stream of respective */ //TODO - public Stream getUniquelyNamedPeopleStartingWith(Character character) { - return null; + public static Stream getUniquelyNamedPeopleStartingWith(Character character) { + + return getUniquelyNamedPeople().filter(person -> character.equals(person.getName().charAt(0))); } /** * @param n first `n` Person objects * @return a Stream of respective */ //TODO - public Stream getFirstNUniquelyNamedPeople(int n) { - return null; + public static Stream getFirstNUniquelyNamedPeople(int n) { + return getUniquelyNamedPeople().limit(n); } /** * @return a mapping of Person Id to the respective Person name */ // TODO - public Map getIdToNameMap() { - return null; + public static Map getIdToNameMap() { + return people.parallelStream().collect(Collectors.toMap(Person::getPersonalId, Person::getName)); } /** * @return Stream of Stream of Aliases */ // TODO - public Stream> getNestedAliases() { - return null; + public static Stream> getNestedAliases() { + return people.stream().map(person -> Arrays.stream(person.getAliases())); } /** * @return Stream of all Aliases */ // TODO - public Stream getAllAliases() { - return null; + public static Stream getAllAliases() { + return people.stream().flatMap(person -> Arrays.stream(person.getAliases())); } // DO NOT MODIFY diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java index 0a9d4d8..ac1adb2 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java @@ -17,20 +17,21 @@ public ArrayConverter(Person... people) { } public ArrayConverter(int collectionSize) { - this(Stream - .generate(new PersonFactory()::createRandomPerson) - .limit(collectionSize) - .toArray(Person[]::new)); + this(PersonFactory.createPersonArray(collectionSize)); +// this(Stream +// .generate(new PersonFactory()::createRandomPerson) +// .limit(collectionSize) +// .toArray(Person[]::new)); } //TODO public List toList() { - return null; + return toStream().collect(Collectors.toList()); } //TODO public Stream toStream() { - return null; + return Arrays.stream(super.objectSequence); } @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..e6f1a1d 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java @@ -16,10 +16,11 @@ public ListConverter(List people) { } public ListConverter(int collectionSize) { - this(Stream - .generate(new PersonFactory()::createRandomPerson) - .limit(collectionSize) - .collect(Collectors.toList())); + this(PersonFactory.createPersonList(collectionSize)); +// this(Stream +// .generate(new PersonFactory()::createRandomPerson) +// .limit(collectionSize) +// .collect(Collectors.toList())); } @Override @@ -29,11 +30,11 @@ public List toList() { //TODO public Stream toStream() { - return null; + return super.objectSequence.stream(); } //TODO public Person[] toArray() { - return null; + return toStream().toArray(Person[]::new); } } diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java index 159d048..770ceff 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java @@ -18,23 +18,24 @@ public StreamConverter(Stream people) { } public StreamConverter(int collectionSize) { - this(Stream - .generate(new PersonFactory()::createRandomPerson) - .limit(collectionSize)); + this(PersonFactory.createPersonStream(collectionSize)); +// this(Stream +// .generate(new PersonFactory()::createRandomPerson) +// .limit(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 toStream().toArray(Person[]::new); } }