We are the wild!
This commit is contained in:
@ -0,0 +1,68 @@
|
||||
package itmo.lab5.cli.helpers;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import itmo.lab5.models.Flat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* The FlatComparatorFactory class provides functionality to create comparators
|
||||
* for sorting Flat objects based on various fields such as ID, name, area,
|
||||
* number of rooms, and creation date.
|
||||
*/
|
||||
public class FlatComparatorFactory {
|
||||
public enum SortField {
|
||||
ID,
|
||||
NAME,
|
||||
AREA,
|
||||
NUMBER_OF_ROOMS,
|
||||
CREATION_DATE
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a Comparator for Flat objects based on the specified sort field.
|
||||
*
|
||||
* @param field the field by which to sort the Flat objects
|
||||
* @return a Comparator for Flat objects
|
||||
* @throws IllegalArgumentException if the specified sort field is unknown
|
||||
*/
|
||||
public static Comparator<Flat> getComparator(SortField field) {
|
||||
switch (field) {
|
||||
case ID:
|
||||
return Comparator.comparingInt(Flat::getId);
|
||||
case NAME:
|
||||
return Comparator.comparing(Flat::getName);
|
||||
case AREA:
|
||||
return Comparator.comparingDouble(Flat::getArea);
|
||||
case NUMBER_OF_ROOMS:
|
||||
return Comparator.comparingInt(Flat::getNumberOfRooms);
|
||||
case CREATION_DATE:
|
||||
return Comparator.comparing(Flat::getCreationDate);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown sort field: " + field);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts a HashMap of Flat objects based on the specified sort field and
|
||||
* returns a new sorted HashMap.
|
||||
*
|
||||
* @param flatsMap the HashMap of Flat objects to be sorted
|
||||
* @param field the field by which to sort the Flat objects
|
||||
* @return a new HashMap containing the sorted Flat objects
|
||||
*/
|
||||
public static HashMap<Integer, Flat> sortFlats(HashMap<Integer, Flat> flatsMap, SortField field) {
|
||||
List<Flat> flatList = new ArrayList<>(flatsMap.values());
|
||||
Collections.sort(flatList, getComparator(field));
|
||||
|
||||
|
||||
var sortedMap = new HashMap<Integer, Flat>();
|
||||
for (Flat flat : flatList) {
|
||||
sortedMap.put(flat.getId(), flat);
|
||||
}
|
||||
return sortedMap;
|
||||
}
|
||||
}
|
@ -10,6 +10,7 @@ import java.util.Scanner;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import itmo.lab5.models.enums.*;
|
||||
import itmo.lab5.cli.helpers.FlatComparatorFactory;
|
||||
import itmo.lab5.models.*;
|
||||
|
||||
public class Reader {
|
||||
@ -42,17 +43,13 @@ public class Reader {
|
||||
collection.put(parsedFlat.getId(), parsedFlat);
|
||||
}
|
||||
|
||||
collection = collection.entrySet()
|
||||
.stream()
|
||||
.sorted(HashMap.Entry.comparingByKey())
|
||||
.collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
Map.Entry::getValue,
|
||||
(oldValue, newValue) -> oldValue,
|
||||
HashMap::new));
|
||||
var sortedById = FlatComparatorFactory.sortFlats(
|
||||
collection,
|
||||
FlatComparatorFactory.SortField.ID
|
||||
);
|
||||
|
||||
scanner.close();
|
||||
return collection;
|
||||
return sortedById;
|
||||
}
|
||||
|
||||
private static Flat parseFlat(String lineToParse) throws IllegalArgumentException, ParseException {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package itmo.lab5.parser;
|
||||
|
||||
import itmo.lab5.cli.helpers.FlatComparatorFactory;
|
||||
import java.io.*;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.HashMap;
|
||||
@ -14,6 +15,11 @@ public class Writer {
|
||||
OutputStreamWriter osw = new OutputStreamWriter(fos);
|
||||
BufferedWriter writer = new BufferedWriter(osw)) {
|
||||
|
||||
flats = FlatComparatorFactory.sortFlats(
|
||||
flats,
|
||||
FlatComparatorFactory.SortField.ID
|
||||
);
|
||||
|
||||
for (Flat flat : flats.values()) {
|
||||
String date = "";
|
||||
|
||||
|
Reference in New Issue
Block a user