2010-06-22 100 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()); 
    } 
}