Suppression d'un message selon un seuil
Fermé
pudya
-
Modifié le 22 août 2017 à 20:27
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 25 août 2017 à 18:47
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 25 août 2017 à 18:47
A voir également:
- Suppression d'un message selon un seuil
- Message - Guide
- Forcer la suppression d'un fichier - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Message d'absence thunderbird - Guide
- Epingler un message whatsapp - Accueil - Messagerie instantanée
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
22 août 2017 à 21:20
22 août 2017 à 21:20
Bonjour,
Nul part dans ta méthode tu n'utilises la durée de vie, c'est comme si elle n'existait pas pour le calcul, alors que tu en as besoin...
Remarque : quand on a besoin de filtres avancés comme celui-ci, il ne faut pas chercher à faire une méthode trop spécifique, il vaut mieux écrire une méthode plus générale qui s'appuie sur un paramètre qui pilotera le traitement selon les spécificités.
Exemple :
Dans ton cas, cela donnerait :
Nul part dans ta méthode tu n'utilises la durée de vie, c'est comme si elle n'existait pas pour le calcul, alors que tu en as besoin...
Remarque : quand on a besoin de filtres avancés comme celui-ci, il ne faut pas chercher à faire une méthode trop spécifique, il vaut mieux écrire une méthode plus générale qui s'appuie sur un paramètre qui pilotera le traitement selon les spécificités.
Exemple :
/** * @param collection * un ensemble de valeurs * @param retainFirst * entre deux valeurs : renvoie true si c'est le premier élément qui est à conserver, false si c'est le deuxième (qui peut être null si aucun élément n'est encore supprimable) * @return l'ensemble des valeurs de départ avec une valeur en moins (sauf si aucun élément n'est supprimable) */ public static <E> List<E> deleteOne(Collection<E> collection, BiPredicate<E, E> retainFirst) { List<E> result = new ArrayList<>(collection.size()); E toDelete = null; for (E element : collection) { if (retainFirst.test(element, toDelete)) { result.add(element); } else { if (toDelete != null) { result.add(toDelete); } toDelete = element; } } return result; }
Dans ton cas, cela donnerait :
public static List<Message> messagesDeTailleSuperieureOuEgaleAuSeuil(List<Message> msgTy, int seuil) { return deleteOne(msgTy, (toAdd, toDelete) -> toAdd.size < seuil || toDelete != null && toAdd.life > toDelete.life); }
Modifié le 25 août 2017 à 18:36
quand j'exécute le programme ci-dessous, je reçois un message d'erreur.
les messages sont ordonnés selon la durée
Trie de la liste par durée de vie
avant application
les erreurs
25 août 2017 à 18:47
Ça n'a pas de sens d'exécuter un programme qui ne compile pas... au mieux ça exécutera le dernier code qui a correctement compilé mais ça ne reflétera pas tes dernières modifications.
Sinon pour l'erreur en elle même, c'est que tu n'as pas su copier-coller correctement le code que je t'ai fourni.
Tu ne devrais pas faire intervenir dans le calcul de la condition qui ne devrait dépendre que de toAdd et toDelete.
Comme je l'avais fait avec :
Evidemment je ne pouvais pas deviner que ta durée de vie s'appelait puisqu'elle n'apparaissait pas dans ton code, moi j'ai mis mais il n'y a que ça à changer...
De plus je ne sais pas pourquoi tu veux mettre une boucle sur msgTy alors qu'elle est déjà gérée par ma méthode.
Quant à ton erreur de compilation :
Aucune variable en Java ne peut s'écrire avec une combinaison .
Donc est faux, je ne sais même pas ce que tu as essayé de faire ici...