-
Ecrire une classe Hotel définie par un nombre de chambres à louer (rooms) ainsi
qu'une valeur d'efficacité (efficiency) correspondant au taux d'occupation de l'hôtel
(donc une valeur en pourcentage entre 0 et 1).
La méthode d'affichage d'un hôtel doit afficher "Hotel" suivi du nombre de champs et
de l'efficacité tel que le code suivant fonctionne
var hotel = new Hotel(5, 0.75);
System.out.println(hotel); // Hotel 5 rooms 0.75
Note: attention à ne pas permettre de créer des objets Hotel invalides.
-
Ecrire une classe Apartment définie par un entier area indiquant le nombre
de m2 de l'appartement ainsi qu'une liste de personnes vivant dans l'appartement.
Il y a au moins une personne par appartement.
La méthode d'affichage d'un appartement doit afficher "Apartment" suivi du nombre de m2 puis
du nom de chaque personne séparée par des virgules et enfin du pourcentage d'efficacité.
Le nombre de personnes dans un appartement ne doit pas changer, pour un appartement donné
(pratiquement, cela veut dire que l'on supprime l'appartement pour en créer un nouveau
si les personnes d'un appartement changent).
Le pourcentage d'efficacité est 0.5 si il y a une personne et 1.0 si il y a plus d'une personne.
Voici un exemple
var apartment = new Apartment(30, List.of("Bony", "Clyde"));
System.out.println(apartment); // Apartment 30 m2 with Bony, Clyde 1.0
Note: attention à ne pas permettre de créer des objets Apartment invalides.
Note2: pour afficher les noms des personnes séparés par des virgules, utiliser un Stream et
un appel à Collectors.joining().
-
Vérifier que le code suivant ne permet pas de créer un appartement vide
en ajoutant une copie défensive à votre code si vous ne l'avez pas déjà fait.
var list = new ArrayList<String>();
list.add("Bob");
var apartment2 = new Apartement(50, list);
list.remove("Bob");
System.out.println(apartment2); // Apartment 50 m2 with Bob 0.5
Note: une copie défensive sur une List se fait en utilisant List.copyOf.
-
Ecrire la classe AssetManager telle que le code suivant affiche le profit par nuit
qui est la somme des prix par nuits des hôtels et des appartements
var hotel = new Hotel(5, 0.75);
var apartment = new Apartment(30, List.of("Bony", "Clyde"));
var manager = new AssetManager();
manager.add(hotel);
manager.add(apartment);
System.out.println(manager.profitPerNight()); // 415
sachant que le prix par nuit pour un appartement est 20 euros par personne et
que le prix par nuit pour un hôtel est 100 euros par chambre multiplié par l'efficacité.
Note: attention, il ne doit pas être possible de créer un objet AssetManager invalide.
Note2: utiliser un Stream pour écrire la méthode profitPerNight.
-
On souhaite maintenant que lorsqu'on affiche un AssetManager
les appartements et les hôtels qu'il contient soient affichés, un par ligne,
dans le même ordre que l'ordre des appels à add.
Par exemple
var hotel = new Hotel(5, 0.75);
var apartment = new Apartment(30, List.of("Bony", "Clyde"));
var manager = new AssetManager();
manager.add(hotel);
manager.add(apartment);
System.out.println(manager); // affiche
// Hotel 5 rooms 0.75
// Apartment 30 m2 with Bony, Clyde 1.0
Note: utiliser un Stream dans votre implantation.
-
On souhaite ajouter une méthode lowestEfficiency qui renvoie une liste
des apartements et des hôtels qui ont une efficacité inférieure ou égale à une valeur
d'efficacité passée en paramètre.
Ecrire la méthode lowestEfficiency telle que le code suivant fonctionne
var hotel = new Hotel(5, 0.75);
var apartment = new Apartment(30, List.of("Bony", "Clyde"));
var manager = new AssetManager();
manager.add(hotel);
manager.add(apartment);
System.out.println(manager.lowestEfficiency(0.8)); // [Hotel 5 rooms 0.75]
Note: utiliser un Stream pour implanter la méthode lowestEfficiency.
-
On souhaite enfin ajouter la méthode remove qui permet de supprimer les appartements
et les hôtels dont l'efficacité est inférieure ou égale à une valeur
d'efficacité passée en paramètre.
Par exemple, le code suivant devra fonctionner
var hotel = new Hotel(5, 0.75);
var apartment = new Apartment(30, List.of("Bony", "Clyde"));
var manager = new AssetManager();
manager.add(hotel);
manager.add(apartment);
manager.remove(0.8);
System.out.println(manager); // affiche
// Apartment 30 m2 with Bony, Clyde 1.0
Note: il existe une méthode removeIf sur l'interface java.util.List.