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..a4ad92e 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.Random;
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(new PersonFactory().createPersonStream(100) ,RandomUtils.createCharacter('A','Z'));
+
+
}
/**
@@ -28,7 +33,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 +41,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 +60,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(x->x.getName().startsWith(startingCharacter)).collect(Collectors.toList());
+
}
@@ -64,7 +70,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(x->x.getName().startsWith(startingCharacter)).collect(Collectors.toList());
+
}
@@ -72,8 +80,10 @@ public List toListOneLine() {
* Using one-line lambda syntax
* @return an array of person object whose name starts with `this.startingCharacter`
*/ //TODO
- public Person[] toArrayOneLine() {
- return null;
+ public Person[] toArrayOneLine()
+ {
+ return personStream.filter(x->x.getName().startsWith(startingCharacter)).toArray(Person[]::new);
+
}
@@ -82,7 +92,7 @@ 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(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..ef1e304 100644
--- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java
+++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonFactory.java
@@ -1,11 +1,12 @@
package com.zipcodewilmington.streams.anthropoid;
+import com.sun.codemodel.internal.JForEach;
import com.zipcodewilmington.streams.tools.RandomUtils;
import com.zipcodewilmington.streams.tools.StringUtils;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
@@ -39,16 +40,27 @@ public Person createRandomPerson() {
* @return - ArrayList of Person objects
*/ // TODO
public List createPersonList(int listSize) {
- return null;
- }
+ /* ArrayList personList = new ArrayList<>(listSize);
+ for (int i = 0; i < listSize; i++) {
+ personList.add(createRandomPerson());
+ }
+
+ return personList;*/
+ return Stream.generate(this::createRandomPerson).limit(listSize).collect(Collectors.toList());
+ }
/**
* @param arrayLength - number of Person objects to create
* @return - Array of Person objects
*/ // TODO
public Person[] createPersonArray(int arrayLength) {
- return null;
+ /* Person[] personArray = new Person[arrayLength];
+ for (int i = 0; i < arrayLength; i++) {
+ personArray[i] = createRandomPerson();
+ }
+ return personArray;*/
+ return Stream.generate(this::createRandomPerson).limit(arrayLength).toArray(Person[]::new);
}
@@ -59,6 +71,9 @@ public Person[] createPersonArray(int arrayLength) {
* @return - Stream representation of collection of Person objects
*/ // TODO
public Stream createPersonStream(int streamCount) {
- return null;
+ // Stream personStream = Arrays.stream(createPersonArray(streamCount));
+ // return personStream;
+ //Another method
+ 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..2eb5440 100644
--- a/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java
+++ b/src/main/java/com/zipcodewilmington/streams/anthropoid/PersonWarehouse.java
@@ -4,13 +4,15 @@
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;
+
+
/**
* Created by leon on 5/29/17.
* The warehouse is responsible for storing, retrieving, and filtering personSequence
@@ -36,7 +38,11 @@ public void addPerson(Person person) {
* @return list of names of Person objects
*/ // TODO
public List getNames() {
- return null;
+ List names = people.stream().map(x -> x.getName()).
+ collect(Collectors.toList());
+ return names;
+
+
}
@@ -44,7 +50,13 @@ public List getNames() {
* @return list of uniquely named Person objects
*/ //TODO
public Stream getUniquelyNamedPeople() {
- return null;
+ List list = people
+ .stream()
+ .filter(distinctByKeys(Person::getName))
+ .collect(Collectors.toList());
+
+
+ return list.stream();
}
@@ -53,7 +65,9 @@ public Stream getUniquelyNamedPeople() {
* @return a Stream of respective
*/ //TODO
public Stream getUniquelyNamedPeopleStartingWith(Character character) {
- return null;
+ Stream unique = getUniquelyNamedPeople();
+
+ return unique.filter(s -> s.getName().startsWith(character.toString()));
}
/**
@@ -61,14 +75,30 @@ public Stream getUniquelyNamedPeopleStartingWith(Character character) {
* @return a Stream of respective
*/ //TODO
public Stream getFirstNUniquelyNamedPeople(int n) {
- return null;
+ Streamunique = getUniquelyNamedPeople();
+ ListnewList = unique.limit(n).collect(Collectors.toList());
+
+
+
+ return newList.stream();
}
/**
* @return a mapping of Person Id to the respective Person name
*/ // TODO
public Map getIdToNameMap() {
- return null;
+ /* MapidNameMap = people.stream()
+ .collect(Collectors.groupingBy(
+ Person::getPersonalId,
+ Collectors.mapping(
+ Person::getName, Collectors.toList());
+
+
+ return idNameMap;*/
+ Map idNameMap = people.stream()
+ .collect( Collectors.toMap(Person::getPersonalId,
+ Person::getName) );
+ return idNameMap;
}
@@ -106,4 +136,20 @@ public int size() {
public Iterator iterator() {
return people.iterator();
}
-}
+
+
+ private static Predicate distinctByKeys(Function super T, ?>... keyExtractors) {
+ final Map, Boolean> seen = new ConcurrentHashMap<>();
+
+ return t ->
+ {
+ final List> keys = Arrays.stream(keyExtractors)
+ .map(ke -> ke.apply(t))
+ .collect(Collectors.toList());
+
+ return seen.putIfAbsent(keys, Boolean.TRUE) == null;
+ };
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java
index 0a9d4d8..47b2703 100644
--- a/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java
+++ b/src/main/java/com/zipcodewilmington/streams/conversions/ArrayConverter.java
@@ -3,6 +3,7 @@
import com.zipcodewilmington.streams.anthropoid.Person;
import com.zipcodewilmington.streams.anthropoid.PersonFactory;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -25,12 +26,14 @@ public ArrayConverter(int collectionSize) {
//TODO
public List toList() {
- return null;
+
+ return new ArrayList<>(Arrays.asList(super.objectSequence));
}
//TODO
public Stream toStream() {
- return null;
+return Arrays.stream(super.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..b4cb365 100644
--- a/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java
+++ b/src/main/java/com/zipcodewilmington/streams/conversions/ListConverter.java
@@ -29,11 +29,13 @@ public List toList() {
//TODO
public Stream toStream() {
- return null;
+
+ return super.objectSequence.stream();
}
//TODO
public Person[] toArray() {
- return null;
+
+ return super.objectSequence.toArray(new Person[0]); //this fashion of writing [0] is new to java it just to say that array will be of same size as collection
}
}
diff --git a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java
index 159d048..b5c3138 100644
--- a/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java
+++ b/src/main/java/com/zipcodewilmington/streams/conversions/StreamConverter.java
@@ -10,6 +10,7 @@
/**
* Created by leon on 5/25/17.
*/
+
public final class StreamConverter extends PersonConversionAgent> {
private final List personList;
public StreamConverter(Stream people) {
@@ -25,16 +26,21 @@ public StreamConverter(int collectionSize) {
// TODO
public List toList() {
- return null;
+
+ //return super.objectSequence.collect(Collectors.toList());
+ return personList;
}
// TODO
public Stream toStream() {
- return null;
+
+ //return super.objectSequence;
+ return personList.stream();
}
// TODO
public Person[] toArray() {
- return null;
+
+ return personList.toArray(new Person[0]);
}
}