diff --git a/looptest.iml b/looptest.iml index 7f2d304..e34277e 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..9508ff9 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,10 @@ 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); + PersonFactory factory = new PersonFactory(); + this.personStream = factory.createPersonStream(100); + this.startingCharacter = "A"; + //this(Stream.empty(), null); } /** @@ -28,7 +32,12 @@ public StreamFilter() { * @param startingCharacter - character to filter by */ //TODO public StreamFilter(Person[] people, Character startingCharacter) { - this(Stream.empty(), null); + this.startingCharacter = startingCharacter.toString(); + this.personStream = Arrays.stream(people) + .filter(person -> person.getName() + .startsWith(this.startingCharacter)); + + //this(Stream.empty(), null); } /** @@ -36,7 +45,13 @@ public StreamFilter(Person[] people, Character startingCharacter) { * @param startingCharacter - character to filter by */ //TODO public StreamFilter(List people, Character startingCharacter) { - this(Stream.empty(), null); + this.startingCharacter = String.valueOf(startingCharacter); + this.personStream = people + .stream() + .filter(person -> person.getName() + .startsWith(this.startingCharacter)); + + //this(Stream.empty(), null); } @@ -55,7 +70,14 @@ 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 personStream + .filter(person -> { + if(startingCharacter.equals(person.getName().charAt(0))){ + return true; + } + return false; + }) + .collect(Collectors.toList()); } @@ -64,7 +86,9 @@ 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 +97,10 @@ public List toListOneLine() { * @return an array of person object whose name starts with `this.startingCharacter` */ //TODO public Person[] toArrayOneLine() { - return null; + //return toArrayMultiLine(); + return personStream + .filter(person -> startingCharacter.equals(person.getName().charAt(0))) + .toArray(Person[]::new); } @@ -82,7 +109,14 @@ public Person[] toArrayOneLine() { * @return an array of person object whose name starts with `this.startingCharacter` */ //TODO public Person[] toArrayMultiLine() { - return null; + return personStream + .filter(person -> { + if(startingCharacter.equals(person.getName().charAt(0))){ + return true; + } + return false; + }) + .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..029ddd8 100644 --- a/src/main/java/com/zipcodewilmington/streams/StreamMap.java +++ b/src/main/java/com/zipcodewilmington/streams/StreamMap.java @@ -1,9 +1,5 @@ package com.zipcodewilmington.streams; -import com.zipcodewilmington.streams.anthropoid.Person; -import com.zipcodewilmington.streams.conversions.StreamConverter; - -import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -16,24 +12,29 @@ public class StreamMap { * Section 8.3 * @param someWord - word to convert to Stream * @return - a Stream of single characters - */ //TODO + */ //TODO - done public static Stream letters(String someWord) { - return null; + return Stream.of(someWord.split("")); } /** * @param someWords - variable amount of String arguments * @return - a Stream of several Streams of single characters - */ //TODO + */ //TODO - done public static Stream> wordsMap(String... someWords) { - return null; + return Stream.of(someWords).map(word -> letters(word)); + //return Stream.of(wordsFlatMap(someWords)); + } /** * @param stringArray - variable amount of String arguments * @return - a Stream of several Streams of single characters - */ //TODO + */ //TODO - done public static Stream wordsFlatMap(String... stringArray) { - return null; + //return Stream.of(stringArray); + Stream wordStream = Stream.of(stringArray); + List wordList = wordStream.collect(Collectors.toList()); + return wordList.stream().flatMap(w -> letters(w)); } } \ 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..b34ed87 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java @@ -3,9 +3,12 @@ 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; +import java.util.stream.IntStream; import java.util.stream.Stream; /** @@ -32,6 +35,7 @@ public Person createRandomPerson() { return randomPerson; } + /** * Section 8.8 * @@ -39,7 +43,11 @@ public Person createRandomPerson() { * @return - ArrayList of Person objects */ // TODO public List createPersonList(int listSize) { - return null; + List personList = Stream + .generate(this::createRandomPerson) + .limit(listSize) + .collect(Collectors.toList()); + return personList; } @@ -48,7 +56,11 @@ 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) + .collect(Collectors.toList()) + .toArray(new Person[0]); } @@ -59,6 +71,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..b1a4d38 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; @@ -34,57 +34,70 @@ public void addPerson(Person person) { /** * @return list of names of Person objects - */ // TODO + */ // TODO - done public List getNames() { - return null; + return people.stream().map(Person::getName).collect(Collectors.toList()); } /** * @return list of uniquely named Person objects - */ //TODO + */ //TODO - done public Stream getUniquelyNamedPeople() { - return null; + List nameList = getNames().stream().distinct().collect(Collectors.toList()); + List uniquePersons = new ArrayList<>(); + people.stream().forEach(element -> { + if(nameList.contains(element.getName())){ + uniquePersons.add(element); + nameList.remove(element.getName()); + }}); + return uniquePersons.stream(); } /** * @param character starting character of Person objects' name * @return a Stream of respective - */ //TODO + */ //TODO - done public Stream getUniquelyNamedPeopleStartingWith(Character character) { - return null; + return getUniquelyNamedPeople() + .filter(person -> person.getName() + .startsWith(String.valueOf(character))); } /** * @param n first `n` Person objects * @return a Stream of respective - */ //TODO + */ //TODO - done public Stream getFirstNUniquelyNamedPeople(int n) { - return null; + return getUniquelyNamedPeople().limit(n); } /** * @return a mapping of Person Id to the respective Person name - */ // TODO + */ // TODO - done public Map getIdToNameMap() { - return null; + return people.stream() + .collect(Collectors.toMap(Person::getPersonalId,Person::getName)); } /** * @return Stream of Stream of Aliases - */ // TODO + */ // TODO - done public Stream> getNestedAliases() { - return null; + return Stream.of(getAllAliases()); } /** * @return Stream of all Aliases - */ // TODO + */ // TODO - done public Stream getAllAliases() { - return null; + return people.stream() + .flatMap(person -> Arrays.stream(person.getAliases())); +// .collect(Collectors.toList()) +// .stream(); } // 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..5b7efe8 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 Stream.of(objectSequence).collect(Collectors.toList()); } //TODO public Stream toStream() { - return null; + return Stream.of(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..9c5d5bd 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java @@ -29,11 +29,11 @@ public List toList() { //TODO public Stream toStream() { - return null; + return objectSequence.stream(); } //TODO public Person[] toArray() { - return null; + return objectSequence.stream().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..94b7a73 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java @@ -25,16 +25,16 @@ 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 personList.stream().toArray(Person[]::new); } }