2010-06-22 62 views
1

我在java arraylist有一個問題。我擅長數據庫:)我們通常使用 「group by」來對行進行分組。我希望同樣的事情,但在Java中爲我的項目之一 我有以下的ArrayList中java arraylist格式

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

我想此ArrayList轉換給我下面的輸出格式:

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

這不是作業 :)。可能對於一些Java Guru來說,它看起來像是一件小事 要做的事情。

+0

這是一個條目數組列表中的代碼 「name7:val54」 不是兩個:) – user238384 2010-06-22 00:33:33

回答

2

我喜歡用地圖來做那種事情。

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 你真棒! 讓我試試,我會回到你身邊:) – user238384 2010-06-22 00:43:53

0

你在找什麼叫做多圖。

java.util中沒有標準的多重映射,但Google集合實現了它 - >here。該項目主頁是

1

使用Map<String, List<Integer>>。您可以使用以下片段:

// 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

中使用比較

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()); 
    } 
}); 

再創建1個清單,。比較該列表是否已經包含類別,如果不是,則添加類別和名稱,否則只需添加名稱。見下文:)

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()); 
    } 
}