2016-05-18 3 views
1

Je lis des données d'un fichier CSV et je veux les stocker dans hashMap. Il y a 3 colonnes, toutes des chaînes. J'utilise ce code:Charger dynamiquement des données dans HashMap

listDataHeader = new ArrayList<String>(); 
    listDataChild = new HashMap<String,List<String>>(); 

    InputStream inputStream = getResources().openRawResource(R.raw.photographers); 
    CSVReader csv = new CSVReader(inputStream); 
    List<String[]> data = csv.read(); 
    List<String> info = new ArrayList<String>(); 

    for(String[] children : data){ 
     info.add(children[1]); 
     info.add(children[2]); 
    } 

    //fill data for the child 

    for (String[] line : data) { 
     listDataHeader.add(line[0]); 
     listDataChild.put(listDataHeader.get(0),info); 
    } 

Le listdataChild devrait garder les informations du 2ème et 3ème colonne du CSV. Actuellement, il charge plus d'une fois cette information. Je serais heureux d'avoir des idées, merci!

+0

Votre question n'est pas très claire, dans votre CSV la première colonne est votre en-tête? et vous voulez garder les 2 et 3 colonnes dans la carte comme valeurs et la première colonne comme clé dans la carte? –

+0

Oui, exactement. La première colonne conserve les informations qui doivent être placées dans listDataHeader (clé), alors que les deux suivantes fonctionnent comme des valeurs et doivent être stockées dans listdataChild. Merci! – VyaraG

Répondre

1

Vous pouvez le faire avec une seule itération.

for (String[] line : data) { 
    List<String> info = new ArrayList<String>(); 
    info.add(line[1]); 
    info.add(line[2]); 
    listDataChild.put(line[0], info); 
} 

Ici, vous itérez à travers les lignes de votre csv et la création d'une nouvelle liste et en ajoutant vos deuxième et troisième colonnes à cette liste et en ajoutant cette liste à la carte.

+0

Merci pour la réponse! Mais où devrais-je dire que l'information stocke l'information des colonnes 2 et 3? – VyaraG

+0

Regardez le code mis à jour. –