From 4074a458790e14a12a270f7422c027c4efaf0b85 Mon Sep 17 00:00:00 2001 From: Maira Botelho Date: Wed, 20 Nov 2019 23:17:26 -0500 Subject: [PATCH] done --- looptest.iml | 8 ++--- .../streams/StreamFilter.java | 29 ++++++++++++++----- .../zipcodewilmington/streams/StreamMap.java | 6 ++-- .../streams/anthropoid/PersonFactory.java | 10 +++++-- .../streams/anthropoid/PersonWarehouse.java | 22 ++++++++------ .../streams/conversions/ArrayConverter.java | 10 +++++-- .../streams/conversions/ListConverter.java | 10 +++++-- .../streams/conversions/StreamConverter.java | 8 +++-- 8 files changed, 68 insertions(+), 35 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..0de1406 100644 --- a/src/main/java/com/zipcodewilmington/streams/StreamFilter.java +++ b/src/main/java/com/zipcodewilmington/streams/StreamFilter.java @@ -5,7 +5,9 @@ import com.zipcodewilmington.streams.tools.RandomUtils; import com.zipcodewilmington.streams.tools.StringUtils; +import java.util.Arrays; import java.util.List; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -20,7 +22,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); + + this.personStream = Stream.builder().build().limit(100); + Character randomChar = (char)((int)'A'+ Math.random()*((int)'Z'-(int)'A'+1)); + this.startingCharacter = randomChar.toString(); } /** @@ -28,7 +33,10 @@ 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 +44,9 @@ 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(); } @@ -45,6 +55,7 @@ public StreamFilter(List people, Character startingCharacter) { * @param startingCharacter - character to filter by */ // I took care of the easy constructor (͡° ͜ʖ ͡°) public StreamFilter(Stream people, Character startingCharacter) { + this.personStream = people; this.startingCharacter = startingCharacter.toString(); } @@ -55,7 +66,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; + return personStream.filter(person -> person.getName().startsWith(this.startingCharacter)) + .collect(Collectors.toList()); } @@ -64,7 +76,8 @@ 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 -> person.getName().startsWith(this.startingCharacter)) + .collect(Collectors.toList()); } @@ -73,7 +86,8 @@ 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 -> person.getName().startsWith(this.startingCharacter)) + .toArray(Person[]::new); } @@ -82,7 +96,8 @@ 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 -> person.getName().startsWith(this.startingCharacter)) + .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..7d371ac 100644 --- a/src/main/java/com/zipcodewilmington/streams/StreamMap.java +++ b/src/main/java/com/zipcodewilmington/streams/StreamMap.java @@ -18,7 +18,7 @@ public class StreamMap { * @return - a Stream of single characters */ //TODO public static Stream letters(String someWord) { - return null; + return someWord.chars().mapToObj(value -> ((Integer) value).toString()); } /** @@ -26,7 +26,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 Arrays.stream(someWords).map(value -> Stream.builder().build()); } /** @@ -34,6 +34,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 Arrays.stream(stringArray); } } \ 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..6582310 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,8 @@ 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 +50,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 +61,8 @@ 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..4c011c0 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,15 +36,19 @@ 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()); } + public static Predicate distinctByName(Function keyExtractor){ + Set seen = ConcurrentHashMap.newKeySet(); + return Person -> seen.add(keyExtractor.apply(Person)); + } /** * @return list of uniquely named Person objects */ //TODO public Stream getUniquelyNamedPeople() { - return null; + return people.stream().filter(distinctByName(Person::getName)); } @@ -53,7 +57,7 @@ public Stream getUniquelyNamedPeople() { * @return a Stream of respective */ //TODO public Stream getUniquelyNamedPeopleStartingWith(Character character) { - return null; + return people.stream().distinct().filter(Predicate.isEqual(character)); } /** @@ -61,14 +65,14 @@ public Stream getUniquelyNamedPeopleStartingWith(Character character) { * @return a Stream of respective */ //TODO public Stream getFirstNUniquelyNamedPeople(int n) { - return null; + return people.stream().distinct().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)); } diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java index 0a9d4d8..c3115e3 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java @@ -12,8 +12,12 @@ * Created by leon on 5/25/17. */ public final class ArrayConverter extends PersonConversionAgent { + + private Person[] personList; + public ArrayConverter(Person... people) { super(people); + personList = super.objectSequence; } public ArrayConverter(int collectionSize) { @@ -25,16 +29,16 @@ public ArrayConverter(int collectionSize) { //TODO public List toList() { - return null; + return Arrays.stream(personList).collect(Collectors.toList()); } //TODO public Stream toStream() { - return null; + return Arrays.stream(personList); } @Override public Person[] toArray() { - return super.objectSequence; + return Arrays.stream(super.objectSequence).toArray(Person[]::new); } } diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java index b64540b..d395962 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java @@ -11,8 +11,12 @@ * Created by leon on 5/25/17. */ public final class ListConverter extends PersonConversionAgent> { + + List personList; + public ListConverter(List people) { super(people); + personList = this.objectSequence; } public ListConverter(int collectionSize) { @@ -24,16 +28,16 @@ public ListConverter(int collectionSize) { @Override public List toList() { - return super.objectSequence; + return personList.stream().collect(Collectors.toList()); } //TODO public Stream toStream() { - return null; + return personList.stream(); } //TODO public Person[] toArray() { - return null; + return personList.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..8b8dfcc 100644 --- a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java +++ b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java @@ -11,7 +11,9 @@ * Created by leon on 5/25/17. */ public final class StreamConverter extends PersonConversionAgent> { + private final List personList; + public StreamConverter(Stream people) { super(people); this.personList = super.objectSequence.collect(Collectors.toList()); @@ -25,16 +27,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); } }