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