Implémente les opérations de base sur les listes.
Dans les langages fonctionnels, les opérations sur les listes telles que length, map et reduce sont très courantes.
Implémente une série d'opérations de base sur les listes, sans utiliser les fonctions existantes.
Le nombre et les noms exacts des opérations à implémenter dépendent du parcours, afin d'éviter les conflits avec des noms existants, mais les opérations générales que tu implémenteras incluent :
append (étant donné deux listes, ajouter tous les éléments de la seconde liste à la fin de la première) ;concatenate (étant donné une série de listes, combiner tous les éléments de toutes les listes en une seule liste aplatie) ;filter (étant donné un prédicat et une liste, renvoyer la liste de tous les éléments pour lesquels predicate(item) est vrai) ;length (étant donné une liste, renvoyer le nombre total d'éléments qu'elle contient) ;map (étant donné une fonction et une liste, renvoyer la liste des résultats de l'application de function(item) à tous les éléments) ;foldl (étant donné une fonction, une liste et un accumulateur initial, replier (réduire) chaque élément dans l'accumulateur en partant de la gauche) ;foldr (étant donné une fonction, une liste et un accumulateur initial, replier (réduire) chaque élément dans l'accumulateur en partant de la droite) ;reverse (étant donné une liste, renvoyer une liste contenant tous les éléments d'origine, mais dans l'ordre inverse).Remarque : l'ordre dans lequel les arguments sont passés aux fonctions de repli (foldl, foldr) est important.
En Java, il est considéré comme une bonne pratique de préférer les méthodes d'instance aux méthodes de classe. Cependant, dans certains cas, il est tout à fait approprié qu'une fonction soit static. Comme les classes en Java sont fermées à la modification (c'est-à-dire que tu ne peux pas ajouter de membres à une classe en dehors de sa définition, contrairement à ce qui se fait dans d'autres langages comme Ruby ou JavaScript), tu ne peux pas ajouter de nouveau comportement directement à la classe. Que faire si tu veux quand même définir un comportement pour un type donné ? La solution idiomatique, dans ce cas, est d'écrire une méthode utilitaire.
On appelle souvent « classes utilitaires » les ensembles de méthodes de ce genre. Parmi les exemples de telles classes au sein de la JRE, on trouve Arrays et Collections.
Dans cet exercice, on veut qu'une List dispose des méthodes map(), reduce(), filter(), etc. Elle n'en a pas, c'est pourquoi on utilise des méthodes statiques.
Les méthodes foldLeft et foldRight sont des fonctions de « fold », un concept bien connu dans le monde de la programmation fonctionnelle, mais moins dans celui de la programmation orientée objet. Voir la page Wikipédia sur le fold pour une présentation générale et des indices de signature et d'implémentation.
Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.
Découvre une introduction pratique à la récursion, explore les alternatives impératives et fonctionnelles aux opérations sur les tableaux, et plonge dans la récursion terminale et les fonctions d'accumulation.