IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Collections] Récupérer dernière entrée d'une Map


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Par défaut [Collections] Récupérer dernière entrée d'une Map
    Bonjour,

    Je cherche à stocker des couples Clé/Valeur (<Object,String>) dans une map.
    J'ai choisi la HashMap. Maintenant, je voudrais récupérer le dernier enregistrement rentré dans la map, je n'ai pas de clé donc je ne peut pas utiliser la méthode get. Je ne vois aucune méthode permettant de le faire.

    Pouvez vous m'aider s'il vous plait ?

    Merci,
    Ouar

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Les Map ne sont pas forcément ordonnée, et les HashMap ne le sont pas du tout ! Donc il n'y a aucune notion de première ou dernière entrée...


    a++

  3. #3
    Membre chevronné Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Par défaut
    t'as plus qu'a travailler avec une LinkedHashMap qui te permet de garder l ordre d'insertion des éléments.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Par défaut
    Oui, merci, linkedHashMap conserverait l'ordre d'insertion.
    Mais quelle méthode utiliser pour extraire la dernière valeur insérée ?
    Je ne peux pas faire directement de get puisqu'il me faudrait la clé.

    Ou alors, si la solution n'est pas immédiate, peut etre qqchose en jouant avec les Iterator ??

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Par défaut
    Bon , voici donc une solution à base d'Iterator, je fais un println tout bête juste pour la démo. S'il y a plus direct je suis preneur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            Map<Integer, String> map = new LinkedHashMap<Integer, String>();
            map.put(1, "Test 1");
            map.put(2, "Test 2");
            map.put(3, "Test 3");
     
            Iterator it = map.keySet().iterator();
            while (it.hasNext()) {
                System.out.println("Dernier : " + map.get(it.next()));
            }

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Où faire sa propre classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    class MonMap<K, V> extends HashMap<K, V> {
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private K lastKey = null;
     
    	public K getLastKey() {
    		return lastKey;
    	}
     
    	public V put(K key, V value) {
    		V ret = super.put(key, value);
    		lastKey = key;
    		return ret;
    	}
    }
     
     
    class Main {
    	static public void test() throws Exception {
    		throw new Exception();
    	}
     
    	public static void main(String[] args) throws Exception {
    		MonMap<Integer, String> map = new MonMap<Integer, String>();
    		map.put(1, "dernier");
    		map.put(0, "Salut");
     
     
    		System.err.println(map.get(map.getLastKey()));
     
    	}
    }
    Le problème étant que tu ne pourras pas travailler avec une "Map" toute seule

  7. #7
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    A noter qu'il est préférable d'implémenter Map et d'utiliser une implémentation de Map dedans plutôt que d'étendre HashMap directement. Ceci afin de ne pas être dépendant de l'implémentation de l'autre Map (genre si ça change d'une version à l'autre de Java).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class MonMap<K, V> implements Map<K, V> {
     
        Map<K, V> wrapper = new HashMap<K, V>();
        private K lastKey = null;
     
     
        // implémenter les méthodes map en utilisant le wrapper
     
        public V put(K key, V value) {
            V ret = wrapper.put(key, value);
            lastKey = key;
            return ret;
        }
     
    }

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par natha Voir le message
    A noter qu'il est préférable d'implémenter Map et d'utiliser une implémentation de Map dedans plutôt que d'étendre HashMap directement. Ceci afin de ne pas être dépendant de l'implémentation de l'autre Map (genre si ça change d'une version à l'autre de Java).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class MonMap<K, V> implements Map<K, V> {
     
        Map<K, V> wrapper = new HashMap<K, V>();
        private K lastKey = null;
     
     
        // implémenter les méthodes map en utilisant le wrapper
     
        public V put(K key, V value) {
            V ret = wrapper.put(key, value);
            lastKey = key;
            return ret;
        }
     
    }
    Dans ce cas, il faudrait éviter d'utiliser un SortedMap car il peut y avoir une collision avec le getLastKey qui n'a pas du tout la même signification

  9. #9
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Il ne peut pas y avoir de collision vu que tu n'étends rien.
    Et de toute façon la méthode en question s'appelle lastKey() et pas getLastKey. Mais même si c'était le cas, l'utilisateur de MonMap n'y verra rien.

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par natha Voir le message
    Il ne peut pas y avoir de collision vu que tu n'étends rien.

    Ah oui, je pensais à autre chose

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Par défaut
    Merci beaucoup pour vos astuces

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Annuler dernière entrée d'une table
    Par robyseb dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/10/2011, 14h54
  2. Réponses: 2
    Dernier message: 03/01/2008, 12h42
  3. Récupérer la clé d'une Map
    Par bobic dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/04/2007, 10h34
  4. Réponses: 1
    Dernier message: 05/12/2006, 17h22
  5. Dernière entrée dans une base de données
    Par ploxien dans le forum JDBC
    Réponses: 1
    Dernier message: 10/05/2006, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo