Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitcd44ef3

Browse files
committed
Review Changes
1 parentce459e8 commitcd44ef3

File tree

7 files changed

+137
-22
lines changed

7 files changed

+137
-22
lines changed

‎collection-pipeline/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ Use the Collection Pipeline pattern when
2626
##Credits
2727

2828
*[Function composition and the Collection Pipeline pattern](https://www.ibm.com/developerworks/library/j-java8idioms2/index.html)
29-
*[Martin Fowler](https://martinfowler.com/articles/collection-pipeline/)
29+
*[Martin Fowler](https://martinfowler.com/articles/collection-pipeline/)
30+
* Java8 Streams (https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html)

‎collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/App.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
*/
2323
packagecom.iluwatar.collectionpipeline;
2424

25+
importjava.util.Arrays;
2526
importjava.util.List;
27+
importjava.util.Map;
2628

2729
importorg.slf4j.Logger;
2830
importorg.slf4j.LoggerFactory;
@@ -49,12 +51,26 @@ public class App {
4951
*/
5052
publicstaticvoidmain(String[]args) {
5153

52-
List<Car>cars =Iterating.createCars();
54+
List<Car>cars =CarFactory.createCars();
5355

54-
List<String>modelsImperative =ImperativeProgramming.getModelsAfter2000UsingFor(cars);
56+
List<String>modelsImperative =ImperativeProgramming.getModelsAfter2000(cars);
5557
LOGGER.info(modelsImperative.toString());
5658

57-
List<String>modelsFunctional =FunctionalProgramming.getModelsAfter2000UsingPipeline(cars);
59+
List<String>modelsFunctional =FunctionalProgramming.getModelsAfter2000(cars);
5860
LOGGER.info(modelsFunctional.toString());
61+
62+
Map<String,List<Car>>groupingByCategoryImperative =ImperativeProgramming.getGroupingOfCarsByCategory(cars);
63+
LOGGER.info(groupingByCategoryImperative.toString());
64+
65+
Map<String,List<Car>>groupingByCategoryFunctional =FunctionalProgramming.getGroupingOfCarsByCategory(cars);
66+
LOGGER.info(groupingByCategoryFunctional.toString());
67+
68+
Personjohn =newPerson(cars);
69+
70+
List<Car>sedansOwnedImperative =ImperativeProgramming.getSedanCarsOwnedSortedByDate(Arrays.asList(john));
71+
LOGGER.info(sedansOwnedImperative.toString());
72+
73+
List<Car>sedansOwnedFunctional =FunctionalProgramming.getSedanCarsOwnedSortedByDate(Arrays.asList(john));
74+
LOGGER.info(sedansOwnedFunctional.toString());
5975
}
6076
}

‎collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/Car.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,19 @@ public class Car {
2929
privateStringmake;
3030
privateStringmodel;
3131
privateintyear;
32+
privateStringcategory;
3233

3334
/**
3435
* Constructor to create an instance of car.
35-
* @paramtheMake the make of the car
36-
* @paramtheModel the model of the car
36+
* @parammake the make of the car
37+
* @parammodel the model of the car
3738
* @param yearOfMake the year of built of the car
3839
*/
39-
publicCar(StringtheMake,StringtheModel,intyearOfMake) {
40-
make =theMake;
41-
model =theModel;
42-
year =yearOfMake;
40+
publicCar(Stringmake,Stringmodel,intyearOfMake,Stringcategory) {
41+
this.make =make;
42+
this.model =model;
43+
this.year =yearOfMake;
44+
this.category =category;
4345
}
4446

4547
publicStringgetMake() {
@@ -53,4 +55,8 @@ public String getModel() {
5355
publicintgetYear() {
5456
returnyear;
5557
}
58+
59+
publicStringgetCategory() {
60+
returncategory;
61+
}
5662
}

‎collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/Iterating.javarenamed to‎collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/CarFactory.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,19 @@
2828
/**
2929
* A factory class to create a collection of {@link Car} instances.
3030
*/
31-
publicclassIterating {
32-
privateIterating() {
31+
publicclassCarFactory {
32+
privateCarFactory() {
3333
}
3434

3535
/**
3636
* Factory method to create a {@link List} of {@link Car} instances.
3737
* @return {@link List} of {@link Car}
3838
*/
3939
publicstaticList<Car>createCars() {
40-
returnArrays.asList(newCar("Jeep","Wrangler",2011),newCar("Jeep","Comanche",1990),
41-
newCar("Dodge","Avenger",2010),
42-
newCar("Buick","Cascada",2016),
43-
newCar("Ford","Focus",2012),
44-
newCar("Chevrolet","Geo Metro",1992));
40+
returnArrays.asList(newCar("Jeep","Wrangler",2011,"Jeep"),newCar("Jeep","Comanche",1990,"Jeep"),
41+
newCar("Dodge","Avenger",2010,"Sedan"),
42+
newCar("Buick","Cascada",2016,"Convertible"),
43+
newCar("Ford","Focus",2012,"Sedan"),
44+
newCar("Chevrolet","Geo Metro",1992,"Convertible"));
4545
}
4646
}

‎collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/FunctionalProgramming.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
importjava.util.Comparator;
2626
importjava.util.List;
27+
importjava.util.Map;
2728
importjava.util.stream.Collectors;
2829

2930
/**
@@ -53,9 +54,32 @@ private FunctionalProgramming() {
5354
* @param cars {@link List} of {@link Car} to be used for filtering
5455
* @return {@link List} of {@link String} representing models built after year 2000
5556
*/
56-
publicstaticList<String>getModelsAfter2000UsingPipeline(List<Car>cars) {
57+
publicstaticList<String>getModelsAfter2000(List<Car>cars) {
5758
returncars.stream().filter(car ->car.getYear() >2000)
5859
.sorted(Comparator.comparing(Car::getYear))
5960
.map(Car::getModel).collect(Collectors.toList());
6061
}
62+
63+
/**
64+
* Method to group cars by category using groupingBy
65+
*
66+
* @param cars {@link List} of {@link Car} to be used for grouping
67+
* @return {@link Map} of {@link String} and {@link List} of {@link Car} with category
68+
* as key and cars belonging to that category as value
69+
*/
70+
publicstaticMap<String,List<Car>>getGroupingOfCarsByCategory(List<Car>cars) {
71+
returncars.stream().collect(Collectors.groupingBy(Car::getCategory));
72+
}
73+
74+
/**
75+
* Method to get all Sedan cars belonging to a group of persons sorted by year of manufacture
76+
*
77+
* @param persons {@link List} of {@link Person} to be used
78+
* @return {@link List} of {@link Car} to belonging to the group
79+
*/
80+
publicstaticList<Car>getSedanCarsOwnedSortedByDate(List<Person>persons) {
81+
returnpersons.stream().map(Person::getCars).flatMap(List::stream)
82+
.filter(car ->"Sedan".equals(car.getCategory()))
83+
.sorted(Comparator.comparing(Car::getYear)).collect(Collectors.toList());
84+
}
6185
}

‎collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/ImperativeProgramming.java

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
importjava.util.ArrayList;
2626
importjava.util.Collections;
2727
importjava.util.Comparator;
28+
importjava.util.HashMap;
2829
importjava.util.List;
30+
importjava.util.Map;
2931

3032
/**
3133
* Imperative-style programming to iterate over the list and get the names of
@@ -55,7 +57,7 @@ private ImperativeProgramming() {
5557
* @param cars {@link List} of {@link Car} to iterate over
5658
* @return {@link List} of {@link String} of car models built after year 2000
5759
*/
58-
publicstaticList<String>getModelsAfter2000UsingFor(List<Car>cars) {
60+
publicstaticList<String>getModelsAfter2000(List<Car>cars) {
5961
List<Car>carsSortedByYear =newArrayList<>();
6062

6163
for (Carcar :cars) {
@@ -77,4 +79,54 @@ public int compare(Car car1, Car car2) {
7779

7880
returnmodels;
7981
}
82+
83+
/**
84+
* Method to group cars by category using for loops
85+
*
86+
* @param cars {@link List} of {@link Car} to be used for grouping
87+
* @return {@link Map} of {@link String} and {@link List} of {@link Car} with
88+
* category as key and cars belonging to that category as value
89+
*/
90+
publicstaticMap<String,List<Car>>getGroupingOfCarsByCategory(List<Car>cars) {
91+
Map<String,List<Car>>groupingByCategory =newHashMap<>();
92+
for (Carcar:cars) {
93+
if (groupingByCategory.containsKey(car.getCategory())) {
94+
groupingByCategory.get(car.getCategory()).add(car);
95+
}else {
96+
List<Car>categoryCars =newArrayList<>();
97+
categoryCars.add(car);
98+
groupingByCategory.put(car.getCategory(),categoryCars);
99+
}
100+
}
101+
returngroupingByCategory;
102+
}
103+
104+
/**
105+
* Method to get all Sedan cars belonging to a group of persons sorted by year of manufacture using for loops
106+
*
107+
* @param persons {@link List} of {@link Person} to be used
108+
* @return {@link List} of {@link Car} to belonging to the group
109+
*/
110+
publicstaticList<Car>getSedanCarsOwnedSortedByDate(List<Person>persons) {
111+
List<Car>cars =newArrayList<>();
112+
for (Personperson:persons) {
113+
cars.addAll(person.getCars());
114+
}
115+
116+
List<Car>sedanCars =newArrayList<>();
117+
for (Carcar:cars) {
118+
if ("Sedan".equals(car.getCategory())) {
119+
sedanCars.add(car);
120+
}
121+
}
122+
123+
sedanCars.sort(newComparator<Car>() {
124+
@Override
125+
publicintcompare(Caro1,Caro2) {
126+
returno1.getYear() -o2.getYear();
127+
}
128+
});
129+
130+
returnsedanCars;
131+
}
80132
}

‎collection-pipeline/src/test/java/com/iluwatar/collectionpipeline/AppTest.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
importjava.util.Arrays;
2828
importjava.util.List;
29+
importjava.util.Map;
2930

3031
importorg.junit.jupiter.api.Test;
3132

@@ -34,17 +35,32 @@
3435
*/
3536
publicclassAppTest {
3637

37-
privateList<Car>cars =Iterating.createCars();
38+
privateList<Car>cars =CarFactory.createCars();
3839

3940
@Test
4041
publicvoidtestGetModelsAfter2000UsingFor() {
41-
List<String>models =ImperativeProgramming.getModelsAfter2000UsingFor(cars);
42+
List<String>models =ImperativeProgramming.getModelsAfter2000(cars);
4243
assertEquals(models,Arrays.asList("Avenger","Wrangler","Focus","Cascada"));
4344
}
4445

4546
@Test
4647
publicvoidtestGetModelsAfter2000UsingPipeline() {
47-
List<String>models =FunctionalProgramming.getModelsAfter2000UsingPipeline(cars);
48+
List<String>models =FunctionalProgramming.getModelsAfter2000(cars);
4849
assertEquals(models,Arrays.asList("Avenger","Wrangler","Focus","Cascada"));
4950
}
51+
52+
@Test
53+
publicvoidtestGetGroupingOfCarsByCategory() {
54+
Map<String,List<Car>>modelsFunctional =FunctionalProgramming.getGroupingOfCarsByCategory(cars);
55+
Map<String,List<Car>>modelsImperative =ImperativeProgramming.getGroupingOfCarsByCategory(cars);
56+
assertEquals(modelsFunctional,modelsImperative);
57+
}
58+
59+
@Test
60+
publicvoidtestGetSedanCarsOwnedSortedByDate() {
61+
Personjohn =newPerson(cars);
62+
List<Car>modelsFunctional =FunctionalProgramming.getSedanCarsOwnedSortedByDate(Arrays.asList(john));
63+
List<Car>modelsImperative =ImperativeProgramming.getSedanCarsOwnedSortedByDate(Arrays.asList(john));
64+
assertEquals(modelsFunctional,modelsImperative);
65+
}
5066
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp