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 :

Convertir une sortedMap en tableau


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Chercheur en biologie
    Inscrit en
    Décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chercheur en biologie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 3
    Par défaut Convertir une sortedMap en tableau
    Bonjour

    voila j'ai une map mylistofcell<double, integer> que j'ai trié
    je dois ensuite manipuler cette map triée et récupérer un certain pourcentage des paires clé/valeurs donc les clés sont max donc les dernières puisque le sort est en ordre naturel croissant.
    dans mon exemple imaginons que je dois récupérer 40% des clé/valeurs soit les 3 derniers (0.181=5581, 0.196=5365, 0.214=5798) et ensuite je dois choisir au hasard entre les valeurs récupérées (5581, 5365, 5798).

    Donc comment transformer la map en tableau afin de manipuler les indices car je pense que se serait plus simple? et apres le random?

    SortedMap<Double, Integer> mylistofcellsorted = new TreeMap (mylistofcell);

    int pourcentofbestcell = 40; //pourcentage de best key à récupérer
    int numberofbestcell= (int) (pourcentofbestcell*mylistofcellsorted.size())/100;//calcul du nombre de cellule a recuperer en fonction de la taille de la liste de cellule disponible triee
    if(numberofbestcell==0) numberofbestcell=1;//signifie qu'on va récuperer la dernier cellule de la liste triée


    exemple de mylistofcellsorted
    {0.116=7519, 0.119=5782, 0.125=6651, 0.135=4933, 0.137=5148, 0.181=5581, 0.196=5365, 0.214=5798}

    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 80
    Par défaut
    Bonjour,

    Je ne pense pas que transformer votre Map en Tableau soit nécessaire.

    Voici un petit exemple qui, j'espère pourra vous éclairer :

    Code java : 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
    37
    38
    39
     public static void main(String[] args) {
     
            Map<Double, Integer> data = new HashMap<>();
            data.put(0.116, 7519);
            data.put(0.119, 5782);
            data.put(0.125, 6651);
            data.put(0.135, 4933);
            data.put(0.137, 5148);
            data.put(0.181, 5581);
            data.put(0.196, 5365);
            data.put(0.214, 5798);
     
            SortedMap<Double, Integer> sortedMap = new TreeMap(data);
     
            int pourcentofbestcell = 40; //pourcentage de best key à récupérer
            int numberofbestcell = (int) (pourcentofbestcell * data.size()) / 100;//calcul du nombre de cellule a recuperer en fonction de la taille de la liste de cellule disponible triee
            if (numberofbestcell == 0) {
                numberofbestcell = 1;//signifie qu'on va récuperer la dernier cellule de la liste triée 
            }
     
            // Notre tableau de random
            List<Integer> ints = IntStream.range(1, sortedMap.size()).boxed().collect(toList()); // Nombre aléatoire de 1 à au nombre de données contenus dans le sorted map
            Collections.shuffle(ints); // on mélange le tableau
            List<Integer> ten = ints.subList(0, numberofbestcell); // on récupère le nombre souhaité de valeurs aléatoires, de 0 à numberofbestcell
     
            // on récupère nos valeurs aléatoires
            for (int i = 0; i < numberofbestcell; i++) {
     
                // On récupère la clef par rapport au tableau contenant des nombres aléatoires
                double key = (double) sortedMap.keySet().toArray()[ten.get(i)];
                // On récupère la valeur
                int value = sortedMap.get(key);
     
                // Affichage
                System.out.println("KEY : " + key);
                System.out.println("Value : " + value);
     
            }
        }

    Bon courage

  3. #3
    Candidat au Club
    Femme Profil pro
    Chercheur en biologie
    Inscrit en
    Décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chercheur en biologie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 3
    Par défaut
    J'ai un message d'erreur
    static interface invocation are not supported in -source 1.7
    incompatible types: List<Object> cannot be converted to List<Integer>

    et puis la solution que vous me proposez n'est pas dans le bon ordre

    Je reprends l'exemple que j'ai donnée:
    - il y a dans ma liste triée {0.116=7519, 0.119=5782, 0.125=6651, 0.135=4933, 0.137=5148, 0.181=5581, 0.196=5365, 0.214=5798}
    - je dois récupérer 40% des éléments dont la clé est la plus élevée (soit dans cet exemple les 3 derniers éléments) donc le résultat attendu est :
    0.181=5581, 0.196=5365, 0.214=5798
    - maintenant que j'ai récupérer ce dont j'ai besoin, je dois choisir aléatoirement UN élément

    Merci d'avance

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    De toute façon tu ne devrais pas utiliser de Map du tout pour ceci. Je rappelle qu'une Map ne peut pas contenir plus d'une fois la même clé. Du coup avec une Map il serait impossible d'avoir par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {0.125=6651, 0.125=4933}
    Il vaudrait mieux ne pas toucher aux Maps.

    Donc oui, le mieux serait un tableau, ou peut-être plutôt une ArrayList. Mais comment faire sachant que ce que tu as c'est un ensemble de clés/valeur et pas juste des valeurs ?
    Eh bien il suffit de créer une classe pour stocker tes données. Tu crées une classe Cell qui contient une clé et une valeur.

    Ensuite tu crées une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Cell> cells = new ArrayList<>();
    Ensuite tu y ajoutes un élément Cell pour chaque clé/valeur que tu veux dedans.
    Ensuite tu tries.
    Ensuite tu prends les derniers avec sublist().
    Ensuite tu prends un élément Cell au hasard.
    Ensuite tu prends la clé et la valeur contenues dans ce Cell.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Candidat au Club
    Femme Profil pro
    Chercheur en biologie
    Inscrit en
    Décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chercheur en biologie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 3
    Par défaut
    J'ai bien une classe Cell (index, valeur)

    List<Cell> cells= new ArrayList<Cell>();
    for(){
    cells.add(cell);
    }

    lorsque j'affiche cells j'obtiens les réferences de cell (exemple projectname.Cell@1efe8899,projectname.Cell@6031A1d6,...) donc je ne sais pas comment trier et afficher

    désolé je suis plus habituée à coder en C et là je reprends le code d'autres personnes donc c'est pas évident

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    'faudrait montrer cette classe Cell. Tu devrais pas avoir besoin qu'on te le demande.

    En supposant que ça ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Cell {
      private final double key;
      private final int value;
     
      public double getKey() {
        return key;
      }
     
      public int getValue() {
        return value;
      }
    }
    Tu peux trier une liste List<Cell> cells en faisant comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cells.sort(Comparator.comparing(Cell::getKey));
    En gros tu dis à la liste de trier ses éléments. Et pour savoir sur quels critères les trier, tu dis d'appeler getKey() sur les éléments et de comparer le résultat.

    Pour ce qui est d'afficher, ben tu aurais pu penser toute seule à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(Cell cell : cells) {
      System.out.println(cell.getKey() + ", " + cell.getValue());
    }
    Mais bon, une solution plus pratique consiste à définir la méthode toString() dans la class Cell, en y ajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
    public String toString() {
      return key + ", " + value;
    }
    Comme ça, Java appellera cette méthode chaque fois que tu demandes une conversion d'une Cell en String.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/06/2009, 17h38
  2. convertir une image en tableau
    Par samplaid dans le forum Débuter
    Réponses: 2
    Dernier message: 01/10/2008, 23h16
  3. Réponses: 2
    Dernier message: 21/04/2008, 14h47
  4. Convertir une string en tableau de caractères
    Par alainpeniche dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2007, 20h00

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