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..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); } } 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; } } diff --git a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java index a4960b1..1a04c97 100644 --- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java +++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java @@ -4,10 +4,12 @@ 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 javax.imageio.plugins.jpeg.JPEGImageReadParam; +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; @@ -34,26 +36,44 @@ public void addPerson(Person person) { /** * @return list of names of Person objects - */ // TODO + */ public List getNames() { - return null; + List names = people.stream() + .map(person -> person.getName()) // apply the function to each element in a stream + .collect(Collectors.toList()); + + return names; } /** * @return list of uniquely named Person objects - */ //TODO + */ public Stream getUniquelyNamedPeople() { - return null; + + 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 * @return a Stream of respective - */ //TODO + */ public Stream getUniquelyNamedPeopleStartingWith(Character character) { - return null; + List uniqueNames = people.stream() + .filter(person -> person.getName().startsWith(character.toString())) + .collect(Collectors.toList()); + + return uniqueNames.stream(); } /** @@ -61,14 +81,25 @@ 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(); } /** * @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; } @@ -87,6 +118,10 @@ public Stream getAllAliases() { return null; } + + + + // DO NOT MODIFY public Boolean contains(Person p) { return people.contains(p); 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 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..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,18 @@ public StreamConverter(int collectionSize) { .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 toList().toArray(new Person[toList().size()]); } }