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)
...