2010-06-22 8 views
1

J'ai un problème avec java arraylist. Je suis bon dans les bases de données :) Nous utilisons normalement "grouper par" pour grouper les lignes. Je veux la même chose, mais en java pour l'un de mon projet je suit le format dans arraylistjava arraylist format

name1:val1 
name1:val2 
name1:val3 
name2:val8 
name2:val7 
name7:val54 
name7:val76 
name7:val34 

Je veux convertir cette arraylist pour me donner la sortie suivante:

-name1 
    val1 
    val2 
    val3 
-name2 
    val8 
    val7 
-name7 
    . 
    . 
    . 
    val34 

ce n'est pas un devoirs :). peut-être pour certains de Java Guru, il ressemble à une petite chose à faire .

+0

il est une entrée dans arraylist "name7: val54" pas deux :) – user238384

Répondre

2

J'aime faire ce genre de chose avec une carte.

import java.util.*; 

public class DoIt { 
    public static void main(String[] args) { 
     List l = new ArrayList<String>(); 
     l.add("name1:val1"); 
     l.add("name1:val2"); 
     l.add("name1:val3"); 
     l.add("name1:val4"); 
     l.add("name2:val1"); 
     Map results = new HashMap<String,String>(); 
     for (Iterator i = l.iterator(); i.hasNext();) { 
      String s = (String)i.next(); 
      String[] tmp = s.split(":"); 
      if (!results.containsKey(tmp[0])) { 
       System.out.println("-"+tmp[0]+"\n"+tmp[1]); 
       results.put(tmp[0], tmp[1]); 
      } else { 
       System.out.println(tmp[1]); 
      } 
     } 
    } 
} 
+0

WOW vous êtes génial! Laissez-moi essayer et je reviendrai à vous :) – user238384

0

Ce que vous cherchez est appelé multi-carte.

Il n'existe pas de multi-mappage standard dans java.util, mais les collections Google l'ont implémenté ->here. La page d'accueil du projet est

1

Utilisez un Map<String, List<Integer>>. Vous pouvez utiliser les extraits suivants:

// declare 
Map<String, List<Integer>> m = new HashMap<String, List<Integer>>(); 

// insert into the structure the pair 'a':2 
List<Integer> l = m.get("a"); 
if (l == null) { 
    l = new ArrayList<Integer>(); 
    m.put("a", l); 
} 
l.add(2); 

// iterate over the values 
for (Map<String, List<Integer>>.Entry e : m) { 
    System.out.println("-" + e.getKey()); 
    for (Integer i : m.getValue()) { 
    System.out.println(" " + i); 
    } 
} 
0

Utilisez Comparator

List<Samp> bla = new ArrayList<Samp>(); 

Collections.sort(bla, new Comparator<Samp>() { 
    @Override 
    public int compare(Samp s1, Samp s2) { 
     return s1.getCategory().compareTo(s2.getCategory()); 
    } 
}); 

puis Créer une liste.,. comparez si cette liste contient déjà la catégorie, sinon, ajoutez Category et Name, sinon ajoutez simplement Name. voir ci-dessous le code :)

List<String> catList = new ArrayList<String>(); 

for(Samp s : bla){ 
    if (!catList.contains(s.getCategory())){ 
     catList.add(s.getCategory()); 
     System.out.println(s.getCategory() + " - ");  
     System.out.println(s.getName()); 
    } else { 
     System.out.println(s.getName()); 
    } 
}