Enlever toutes les occurrences du même élément d'une ArrayList
Résolu/Fermé
neocol
Messages postés
63
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
6 février 2016
-
5 févr. 2016 à 19:41
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 6 févr. 2016 à 20:11
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 6 févr. 2016 à 20:11
A voir également:
- Supprimez toutes les occurrences
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Supprimer toutes les publications facebook - Guide
- Supprimez les composantes rouge et verte de cette image. - Forum Word
- Supprimer une conversation messenger pour les deux personnes ✓ - Forum Facebook
- Supprimer les occurrences word - Guide
2 réponses
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
6 févr. 2016 à 11:56
6 févr. 2016 à 11:56
Bonjour,
En Java les données sont typées. Et dans ta liste même si les valeurs s'affichent de la même manière en réalité elles sont de types différents.
Tu peux afficher les types de données comme ceci :
Ce qui donne :
Éventuellement dans ton cas tu peux considérer que deux objets ont la même valeur si la méthode toString() renvoie la même chose. C'est à dire que les deux objets s'affichent de la même manière.
Dans ce cas je te conseilles de faire une Map avec les valeurs toString en clé et le nombre d’occurrences en valeur puis ensuite de ne garder que les objets dont le toString n'a que des valeurs 1.
En Java les données sont typées. Et dans ta liste même si les valeurs s'affichent de la même manière en réalité elles sont de types différents.
Tu peux afficher les types de données comme ceci :
for (Object obj : list) System.out.println(obj.getClass().getSimpleName()+" "+obj);
Ce qui donne :
Integer 1En conséquence 1 et "1" sont différents puisque leurs types sont différents, de même pour 1.4 et "1.4".
String 1
Double 1.4
String 1.4
String hy
String hy
Éventuellement dans ton cas tu peux considérer que deux objets ont la même valeur si la méthode toString() renvoie la même chose. C'est à dire que les deux objets s'affichent de la même manière.
Dans ce cas je te conseilles de faire une Map avec les valeurs toString en clé et le nombre d’occurrences en valeur puis ensuite de ne garder que les objets dont le toString n'a que des valeurs 1.
ArrayList<Object> list = new ArrayList<>(); list.add(1); list.add("1"); list.add(1.4); list.add("1.4"); list.add("hy"); list.add("hy"); System.out.println(list); // [1, 1, 1.4, 1.4, hy, hy] Map<String, Integer> tmp = new HashMap<String, Integer>(); for (Object obj : list) { String str = obj.toString(); Integer n = tmp.get(str); tmp.put(str, n == null ? 1 : n + 1); } System.out.println(tmp); // {1=2, hy=2, 1.4=2} List<Object> result = new ArrayList<>(); for (Object obj : list) { String str = obj.toString(); Integer n = tmp.get(str); if (n == 1) result.add(obj); } System.out.println(result); // []
neocol
Messages postés
63
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
6 février 2016
1
6 févr. 2016 à 18:40
6 févr. 2016 à 18:40
Merci pour ton code ça marche nickel.
6 févr. 2016 à 16:17
En fait, j'ai pensé exactement à utiliser le toString(), parce-que ça renvoie la même valeur pour "1" et 1, mais je n'ai pas eu l'idée d'utiliser les Map.
En si vous me permettez, je veux demander un conseil.
Je veux une list pareils, car je travail sur le DataMining dans le big Data.
du coup à partir d'un fichier qui contient des lignes structurées, comme : Exemple table de température moyenne pour chaque mois
Jan Fev Mars ........
Paris 1 2 5 ......
Autre_ville -1 3 10 ....
C'est juste un exemple de données(DataSet).
Du coup je dois concevoir une class DataSet par exemple en java pour pouvoir stocker les lignes pour traiter les lignes ou les colonnes aussi quel que soit le type des données.
J'ai essayé de chercher des Modèles UML pour modéliser la structure des données, mais je n'ai pas encore trouvé. du coup j'ai essayé de coder cette class qui peut me présenter des DataSet. parfois on les appelle Vector ou (Attribute, Instance, Instances ..).
SVP, est-ce-que vous avez des conseils pour modéliser des structures de données de types différentsen UML ou java?
Merci bien KX.
6 févr. 2016 à 16:19
6 févr. 2016 à 17:36
Modifié par KX le 6/02/2016 à 18:00
Remarque : si tu travailles avec un type E alors utilises le plutôt que d'avoir un Object, ça t'éviteras d'avoir à faire des cast, comme dans ton dernier code.
De plus pour éviter les NullPointerException tu devrais utiliser String.valueOf(obj) au lieu de faire un obj.toString()
Enfin la structure est maladroite, il y a plus simple.
6 févr. 2016 à 18:33
Je travail sur un projet d'analyse des données, je ne sais pas encore comment seront les données(structure : lignes et colonnes).
du coup j'ai pensé s'il y a un modèle de class java qui peut représenter un DataSet général, qui peut traiter des données quelques soient leurs types(String, Integer, Double, Date)
Il y a des implémentation des Vector ou DataSet , Attribute, Instance en java, mais je veux créer ma propre solution.
Du coup pour faire du Data Modeling est-ce-qu'il y a des règles à suivre, Car après la phase de la collecte des données et le stockage des données(Hadoop), je vais m'orienter vers Hadoop pour pouvoir faire des traitements parallels sur des plusieurs clusters.
Ma question est comment concevoir une classe, qui traiter des données différents, est-ce-que le modèle de la classe que j'ai écrit la dessus suit le bon chemin où il y a quelques choses à ajouter en considération?
J’espère avoir des conseils de votre part.
Merci KX