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);
}
}