Suppression d'un message selon un seuil
pudya
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je souhaite une aide. en effet , je veux supprimer le message qui a une taille(12) supérieure ou égale à un seuil(8) de taille et il a la plus petite durée de vie(7).
quand j'exécute mon programme, c'est le message de faible durée de vie qui est supprimé(taille-4 et vie 6).
voilci le programme
les données avant sont(les messages sont ordonnés suivant la colonne -2):
le résultat, alors qu'il faut supprimer 12 étant donné que le seuil est 8
je souhaite une aide. en effet , je veux supprimer le message qui a une taille(12) supérieure ou égale à un seuil(8) de taille et il a la plus petite durée de vie(7).
quand j'exécute mon programme, c'est le message de faible durée de vie qui est supprimé(taille-4 et vie 6).
voilci le programme
public static ArrayList<Message> messagedetaillesupérieureouegaleauseuil(ArrayList<Message> msgTy, int seuil){ System.out.println("supprimer le message de taille sup au seuil"); ArrayList<Message> result2 = new ArrayList<Message>(); int i= 0; while ( (msgTy.get(i).size <= seuil) && i < msgTy.size()) { if (msgTy.get(0).size < seuil) { result2.add(msgTy.get(i)); i++; }else{ msgTy.remove(0); } } result2.add(msgTy.get(0));msgTy.remove(0); return result2; }
les données avant sont(les messages sont ordonnés suivant la colonne -2):
4 6
12 7
11 8
11 9
11 9
13 10
24 11
11 14
6 15
le résultat, alors qu'il faut supprimer 12 étant donné que le seuil est 8
12 7
11 8
11 9
11 9
13 10
24 11
11 14
6 15
A voir également:
- Suppression d'un message selon un seuil
- Forcer la suppression d'un fichier - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Epingler un message whatsapp - Accueil - Messagerie instantanée
- Comment lire un message supprimé sur whatsapp - Guide
- Message absence thunderbird - Guide
1 réponse
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); }
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
Ç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...