From 33e4a870cac3225e2f0e70e538c081dac570d4e4 Mon Sep 17 00:00:00 2001 From: yichen88 <30594441+yichen88@users.noreply.github.com> Date: Sat, 7 Mar 2020 12:12:06 +0100 Subject: [PATCH] Fix imperative-style. (#1180) Signed-off-by: yichen88 --- .../ImperativeProgramming.java | 68 +++++++++++++++---- 1 file changed, 54 insertions(+), 14 deletions(-) diff --git a/collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/ImperativeProgramming.java b/collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/ImperativeProgramming.java index 5341d2743..bdf2d5e80 100644 --- a/collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/ImperativeProgramming.java +++ b/collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/ImperativeProgramming.java @@ -23,12 +23,12 @@ package com.iluwatar.collectionpipeline; -import java.util.Collection; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * Imperative-style programming to iterate over the list and get the names of cars made later than @@ -57,11 +57,27 @@ public class ImperativeProgramming { * @return {@link List} of {@link String} of car models built after year 2000 */ public static List getModelsAfter2000(List cars) { - return cars.stream() - .filter(car -> car.getYear() > 2000) - .sorted(Comparator.comparingInt(Car::getYear)) - .map(Car::getModel) - .collect(Collectors.toList()); + List carsSortedByYear = new ArrayList<>(); + + for (Car car : cars) { + if (car.getYear() > 2000) { + carsSortedByYear.add(car); + } + } + + Collections.sort(carsSortedByYear, new Comparator() { + @Override + public int compare(Car car1, Car car2) { + return car1.getYear() - car2.getYear(); + } + }); + + List models = new ArrayList<>(); + for (Car car : carsSortedByYear) { + models.add(car.getModel()); + } + + return models; } /** @@ -71,7 +87,17 @@ public class ImperativeProgramming { * @return {@link Map} with category as key and cars belonging to that category as value */ public static Map> getGroupingOfCarsByCategory(List cars) { - return cars.stream().collect(Collectors.groupingBy(Car::getCategory)); + Map> groupingByCategory = new HashMap<>(); + for (Car car : cars) { + if (groupingByCategory.containsKey(car.getCategory())) { + groupingByCategory.get(car.getCategory()).add(car); + } else { + List categoryCars = new ArrayList<>(); + categoryCars.add(car); + groupingByCategory.put(car.getCategory(), categoryCars); + } + } + return groupingByCategory; } /** @@ -82,11 +108,25 @@ public class ImperativeProgramming { * @return {@link List} of {@link Car} to belonging to the group */ public static List getSedanCarsOwnedSortedByDate(List persons) { - return persons.stream() - .map(Person::getCars) - .flatMap(Collection::stream) - .filter(car -> car.getCategory() == Category.SEDAN) - .sorted(Comparator.comparingInt(Car::getYear)) - .collect(Collectors.toList()); + List cars = new ArrayList<>(); + for (Person person : persons) { + cars.addAll(person.getCars()); + } + + List sedanCars = new ArrayList<>(); + for (Car car : cars) { + if (Category.SEDAN.equals(car.getCategory())) { + sedanCars.add(car); + } + } + + sedanCars.sort(new Comparator() { + @Override + public int compare(Car o1, Car o2) { + return o1.getYear() - o2.getYear(); + } + }); + + return sedanCars; } }