Pensée anecdotique sur l'IA dans le développement logiciel
Author: Unknown
Date: 06/10/2025
Sur un projet perso, j'avais ce morceau de code java qui, sur une liste de notes allNotes, ne retient que les notes ayant au moins un des tags contenus dans la list de tags onlyTags
if (config.getOnlyTags()!=null) {
Set<String> onlyTags=new HashSet<>(Arrays.asList(config.getOnlyTags()));
logger.info("OnlyTags mode : we have to filter and process only notes with {} tags", String.join(", ", onlyTags));
allNotes=allNotes.stream()
.filter(note -> note.getTags().stream().anyMatch(onlyTags::contains))
.toList();
logger.info("OnlyTag mode {} notes with one of OnlyTags {} ", allNotes.size(),String.join(", ",config.getOnlyTags()));
}
Ensuite, sur ce même projet, j'ai eu ensuite le besoin de faire l'inverse, c'est à dire, exclure des notes ayant au moins un des tags contenus dans la list de tags excludedTags. Alors, j'ai copié collé le code précédent, en renommant toutes les variables et en mettant à jour les logs. Restait à changer le code proprement dit. Et là, hé bien, j'ai eu la flemme, et j'ai sollicité un LLM.
dis moi ce aqui cloche dans le code ci-dessous:
if (config.getExcludedTags()!=null) {
Set<String> excludedTags=new HashSet<>(Arrays.asList(config.getExcludedTags()));
logger.info("ExcludedTags mode : we have to filter and NOT process notes with {} tags", String.join(", ", excludedTags));
allNotes=allNotes.stream()
.filter(note -> note.getTags().stream().anyMatch(excludedTags::contains))
.toList();
logger.info("ExcludedTags mode {} notes with no one of ExcludedTags {} ", allNotes.size(),String.join(", ",config.getExcludedTags()));
}
La réponse a été correcte:
Il y a deux problèmes dans ce bloc:
1. Le filtre est inversé
- .filter(note -> note.getTags().stream().anyMatch(excludedTags::contains))
- Cela garde les notes qui ont au moins un tag exclu (ce que tu ne veux pas). Tu veux l’inverse: ne pas publier les notes qui ont un tag exclu.
2. Le cas où la liste des tags exclus est vide
- Si config.getExcludedTags() retourne une liste vide, excludedTags sera vide et le filtre supprimera toutes les notes (anyMatch sur un set vide donne false).
Correction proposée:
- Appliquer le filtre avec noneMatch (aucun tag exclu ne doit apparaître dans les tags de la note).
- Ne pas exécuter le filtrage si excludedTags est vide (ou vérifier et se comporter en conséquence).
Sur le point 2, par construction, mes listes sont soit égales à null soit non vides. Mais remarque pertinente.
Sur le point 1, c'est la réponse à ma question "par quoi faut-il remplacer le anyMatch" ? Ceci étant, était-ce pertinent de passer par l'IA ? Si j'avais consulté la javadoc, j'aurais eu également la réponse, plus lentement, certes. Mais j'aurais découvert potentiellement aussi d'autres éléments de l'API de Sttream. Bon, là, j'avoue, il n'y a pas une tonne de méthode du type match. Mais, c'est l'occasion de se perdre dans un trou de lapin en creusant la partie réduction des Streams.
Tags: notes-diverses développement ia