On considère le champ de type table suivant :
var map = new HashMap<String,List<V>>();
forEach
de Map
.toArrayList()
qui remplace les valeurs associées aux clefs par une version non mutable de la liste associée si la clef commence par le caractère '*'
. On utilisera la méthode replaceAll
de Map
et une méthode de Collections
pour la création de la vue non mutable.append(String k,V v)
qui ajoute v
à la liste associée à k
ou, si k n’est pas une clef présente, lui associe une liste de longueur 1 contenant v
. Cette méthode doit utiliser la méthode compute
de l’interface Map
.On se donne le code suivant :
<U,T> U fold(Collection<T> c, U u, BiFunction<U,T,U> f) {
for(T t:c) {
u = f.apply(u,t);
}
return u;
}
forEach
de Collection
? Pourquoi ?Integer
d’une listeString
et leur concaténation. On utilisera la notation ::
fold
pour autoriser un post-traitement une fois la valeur retournée calculée. Essentiellement, cela consiste à ajouter un paramètre g
judicieusement typé et remplacer l’instruction return u;
par return g.apply(u);
.String
de la liste des éléments comparable à ce que fait toString
. On construira la chaîne avec un StringBuilder
.Déclarer une hiérarchie : la classe O
est superclasse des classes A
, B
et C
.
Implémenter un système de visiteur dans la hiérarchie afin de pouvoir implémenter une méthode dispatch
dans O telle que, pour un objet o
de type O
, l’appel
o.dispatch(fA,fB,fC)
appelle fA.apply(o)
si o
est de type A
, fB.apply(o)
si o
est de type B
et fC.apply(o)
si o
est de type C
. Votre implémentation doit fonctionner même si les fonctions retournent des valeurs ou lèvent des exceptions.
if (t.equals(null)) ... /* 2016 */
if (x != 0)
return x;
else
return 0;
a.next()
if (a==null)
...