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..f0f5ee4 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;
@@ -15,12 +16,18 @@
public class StreamFilter {
private final Stream personStream;
public final String startingCharacter;
-
+ public final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/**
* 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.generate(new PersonFactory()::createRandomPerson).limit(100);
+ this.startingCharacter = randomLetter();
+ }
+
+ public String randomLetter() {
+ Integer index = (int) Math.round(Math.random() * 26);
+ return this.alphabet.substring(index, index+1);
}
/**
@@ -28,7 +35,7 @@ public StreamFilter() {
* @param startingCharacter - character to filter by
*/ //TODO
public StreamFilter(Person[] people, Character startingCharacter) {
- this(Stream.empty(), null);
+ this(Arrays.stream(people), startingCharacter);
}
/**
@@ -36,7 +43,7 @@ public StreamFilter(Person[] people, Character startingCharacter) {
* @param startingCharacter - character to filter by
*/ //TODO
public StreamFilter(List people, Character startingCharacter) {
- this(Stream.empty(), null);
+ this(people.stream(), startingCharacter);
}
@@ -55,7 +62,11 @@ 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 this.personStream.filter(person -> {
+ String nameChar = person.getName().substring(0,1);
+ Boolean cool = nameChar.equalsIgnoreCase(startingCharacter);
+ return cool;
+ }).collect(Collectors.toList());
}
@@ -64,7 +75,9 @@ public List toListMultiLine() {
* @return a list of person objects whose name starts with `this.startingCharacter`
*/ //TODO
public List toListOneLine() {
- return null;
+ return this.personStream
+ .filter(person -> person.getName().substring(0,1).equalsIgnoreCase(startingCharacter))
+ .collect(Collectors.toList());
}
@@ -73,7 +86,10 @@ public List toListOneLine() {
* @return an array of person object whose name starts with `this.startingCharacter`
*/ //TODO
public Person[] toArrayOneLine() {
- return null;
+ return this.personStream
+ .filter(person -> person.getName().substring(0,1).equalsIgnoreCase(startingCharacter))
+ .collect(Collectors.toList())
+ .toArray(new Person[0]);
}
@@ -82,7 +98,7 @@ public Person[] toArrayOneLine() {
* @return an array of person object whose name starts with `this.startingCharacter`
*/ //TODO
public Person[] toArrayMultiLine() {
- return null;
+ return toListMultiLine().toArray(new Person[0]);
}
}
diff --git a/src/main/java/com/zipcodewilmington/streams/StreamMap.java b/src/main/java/com/zipcodewilmington/streams/StreamMap.java
index cf35024..6186fa6 100644
--- a/src/main/java/com/zipcodewilmington/streams/StreamMap.java
+++ b/src/main/java/com/zipcodewilmington/streams/StreamMap.java
@@ -3,6 +3,7 @@
import com.zipcodewilmington.streams.anthropoid.Person;
import com.zipcodewilmington.streams.conversions.StreamConverter;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -18,7 +19,7 @@ public class StreamMap {
* @return - a Stream of single characters
*/ //TODO
public static Stream letters(String someWord) {
- return null;
+ return Arrays.stream(someWord.split(""));
}
/**
@@ -26,7 +27,11 @@ public static Stream letters(String someWord) {
* @return - a Stream of several Streams of single characters
*/ //TODO
public static Stream> wordsMap(String... someWords) {
- return null;
+// ArrayList> out = new ArrayList<>();
+// Arrays.stream(someWords).forEach(someWord -> out.add(letters(someWord)));
+// return out.stream();
+ return Arrays.stream(someWords).map(someWord -> letters(someWord));
+
}
/**
@@ -34,6 +39,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).flatMap(someWord -> letters(someWord));
}
}
\ 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..9a3924f 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,7 @@ public Person createRandomPerson() {
* @return - ArrayList of Person objects
*/ // TODO
public List createPersonList(int listSize) {
- return null;
+ return createPersonStream(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 createPersonStream(arrayLength).collect(Collectors.toList()).toArray(new Person[arrayLength]);
}
@@ -59,6 +61,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(new PersonFactory()::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..6dfb1fb 100644
--- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java
+++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java
@@ -4,10 +4,11 @@
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.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -36,15 +37,25 @@ 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 Predicate distinctByKey(Function super T, ?> keyExtractor) {
+ Set