diff --git a/looptest.iml b/looptest.iml
index 7f2d304..5cd0a65 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..c269392 100644
--- a/src/main/java/com/zipcodewilmington/streams/StreamFilter.java
+++ b/src/main/java/com/zipcodewilmington/streams/StreamFilter.java
@@ -8,6 +8,8 @@
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import java.util.Arrays;
+import com.zipcodewilmington.streams.anthropoid.PersonFactory;
/**
* Created by leon on 5/2/17.
@@ -18,25 +20,25 @@ 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(new PersonFactory().createPersonStream(100), RandomUtils.createCharacter('A', 'Z'));
}
/**
* @param people - Array of person objects
* @param startingCharacter - character to filter by
- */ //TODO
+ */
public StreamFilter(Person[] people, Character startingCharacter) {
- this(Stream.empty(), null);
+ this(Arrays.stream(people), startingCharacter);
}
/**
* @param people - List of person objects
* @param startingCharacter - character to filter by
- */ //TODO
+ */
public StreamFilter(List people, Character startingCharacter) {
- this(Stream.empty(), null);
+ this(people.stream(), startingCharacter);
}
@@ -53,27 +55,29 @@ 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(x -> x.getName()==startingCharacter).collect(java.util.stream.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 personStream.filter(x -> x.getName().startsWith(this.startingCharacter)).collect(java.util.stream.Collectors.toList());
}
/**
* Using one-line lambda syntax
* @return an array of person object whose name starts with `this.startingCharacter`
- */ //TODO
+ */
public Person[] toArrayOneLine() {
- return null;
+ return personStream
+ .filter(x -> x.getName().startsWith(this.startingCharacter))
+ .toArray(Person[]::new);
}
@@ -82,7 +86,9 @@ public Person[] toArrayOneLine() {
* @return an array of person object whose name starts with `this.startingCharacter`
*/ //TODO
public Person[] toArrayMultiLine() {
- return null;
+ return personStream
+ .filter(x -> x.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..25eed69 100644
--- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java
+++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java
@@ -37,18 +37,18 @@ public Person createRandomPerson() {
*
* @param listSize - number of Person objects to create
* @return - ArrayList of Person objects
- */ // TODO
+ */
public List createPersonList(int listSize) {
- return null;
+ return Stream.generate(this::createRandomPerson).limit(listSize).collect(java.util.stream.Collectors.toList());
}
/**
* @param arrayLength - number of Person objects to create
* @return - Array of Person objects
- */ // TODO
+ */
public Person[] createPersonArray(int arrayLength) {
- return null;
+ return Stream.generate(this::createRandomPerson).limit(arrayLength).toArray(Person[]::new);
}
@@ -57,8 +57,8 @@ 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;
+ 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..fb05db6 100644
--- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java
+++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java
@@ -3,13 +3,16 @@
import com.zipcodewilmington.streams.tools.ReflectionUtils;
import com.zipcodewilmington.streams.tools.logging.LoggerHandler;
import com.zipcodewilmington.streams.tools.logging.LoggerWarehouse;
-
+import java.util.concurrent.ConcurrentHashMap;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import java.util.function.Predicate;
+import java.util.function.Function;
+import java.util.Arrays;
/**
* Created by leon on 5/29/17.
@@ -34,57 +37,62 @@ 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());
}
/**
* @return list of uniquely named Person objects
- */ //TODO
+ */
public Stream getUniquelyNamedPeople() {
- return null;
+ return people.stream().filter(distinctByKey(Person::getName));
+ }
+
+ private static Predicate distinctByKey(Function super T, Object> keyExtractor) {
+ Map