:: Enseignements :: Master :: M1 :: 2013-2014 :: Java Avancé ::
[LOGO]

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.

  1. 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.
  2. Faire en sorte qu'une exception NullPointerException soit levée si la liste ou la fonction prises en paramètre sont null.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

  1. Ecrire la déclaration de la méthode asMappedCollection.
  2. 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.
  3. Ecrire l'implantation de la méthode asMappedCollection.
    Vérifier que la suppression fonctionne correctement.
  4. 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.