:: Enseignements :: Master :: M1 :: 2013-2014 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | TP noté de Java Avance |
Le TP consiste à implanter deux vues permettant d'appliquer une fonction
à des élements stockés dans une liste puis dans une collection.
Rappel, vous devez utiliser
eclipse-lambda, configurer le JRE pour qu'il pointe
sur
/usr/local/apps/Java8 et le compilateur pour utiliser la version 1.8.
Si vous n'y arrivez pas,
lisez la doc.
Enfin, vous devez configurer le workspace d'Eclipse (File > Switch Workspace) pour
qu'il corresponde au répertoire
EXAM que vous avez dans le
home
de votre session de TP noté.
Exercice 1 - Vue d'élements à travers une fonction
Le but de cet exercice est de créer une méthode statique
asMappedList dans la classe
MoreCollections qui
prend en paramètre une liste et une fonction (
java.util.function.Function)
et renvoie une nouvelle liste.
La nouvelle liste doit se comporter comme si on avait, pour chaque élement de
la liste pris en paramètre de
asMappedList, appliqué la fonction
et stocké le nouvel élement obtenu dans la nouvelle liste.
Mais la nouvelle liste doit
agir comme une vue,
elle
ne doit pas stocker les nouveaux élements mais effectuer
le calcul des nouveaux éléments à la demande (sans les stocker donc).
Les tests JUnit sont dans la classe
MoreCollectionsTest.java.
-
Ecrire la signature de la méthode asMappedList.
Remarque: le type des éléments de la liste pris en paramètre et celui de
la liste renvoyée n'est pas nécessairement le même.
-
Faire en sorte qu'une exception NullPointerException soit levée
si la liste ou la fonction prises en paramètre sont null.
-
On ne veut pas traiter le cas des listes qui n'accèdent pas en temps constant
à leur N ième élement. Pour ce type de liste (comme par exemple LinkedList)
la méthode asMappedList devra lever l'exception
IllegalStateException.
-
Ecrire le code de la méthode asMappedList et vérifier que
les tests unitaires passent.
Note: si vous créez une liste que vous remplissez avec des élements,
ce n'est pas ce qui est demandé, on vous demande de créer une vue.
-
Ecrire un main de test qui crée une liste d'entiers
1, 2, 4, 8 et appelle asMappedList avec comme fonction
une fonction qui multiplie par 2 les entiers.
Afficher la liste pour vérifier que le résultat est bien
2, 4, 8, 16.
On vous demande ici d'utiliser la syntaxe des lambdas pour spécifier
la fonction qui mutiplie les entiers par 2.
-
Modifier votre main pour ajouter du code qui utilise
la méthode asMappedList pour transformer la liste
d'entiers 1, 2, 4, 8 en liste de chaîne de caractères
(en appelant toString sur chaque élément)
et afficher celle-ci.
On vous demande ici d'utiliser la syntaxe des méthodes references
pour spécifier la fonction.
Exercice 2 - Vue d'élement à travers une fonction 2
On souhaite faire la même chose que dans l'exercice 1 mais
avec des Collections à la place des listes.
On souhaite donc, toujours dans la classe MoreCollections,
écrire une méthode asMappedCollection qui prend en paramètre
une collection et une fonction et renvoie une collection
qui agit comme une vue.
-
Ecrire la déclaration de la méthode asMappedCollection.
-
Avant d'écrire l'implantation, expliquer pourquoi (en commentaire
de la méthode asMappedCollection) il n'est pas possible
décrire une méthode asMappedSet qui prendrait un set
et une fonction et renverrai en set.
-
Ecrire l'implantation de la méthode asMappedCollection.
Vérifier que la suppression fonctionne correctement.
-
On souhaite enfin que si la collection prise en paramètre est
serializable, alors la collection renvoyée par asMappedCollection
soit aussi serializable.
Et on ne veut pas que la collection renvoyée soit serializable si
la collection prise en paramètre ne l'est pas.
© Université de Marne-la-Vallée