ArrayList的分组及变换为二维数组

ArrayList的分组及转换为二维数组
今天突然想到一个问题,即ArrayList的分组问题,person对象保存在ArrayList中,如何按部门再进行分组,每个部门的person对象存放到各自的一个ArrayList中,再将产生的若干个List<Person>保存到List<List<Person>>,最后将生成的List<List<Person>>转换为Person[][],我的代码如下:
package test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class ListTest {

	public static void main(String[] args) {
		List<Person> persons = ListTest.getPersons();
		String[] set = ListTest.getCompany(persons);
		List<List<Person>> list = ListTest.getLists(set, persons);
		
		Person[][] ps = ListTest.getArrayPerson2(list);
		for (Person[] persons2 : ps) {
			for (Person person : persons2) {
				System.out.println(person.getId()+","+person.getName());
			}
		}
	}
	
	/*将List<List<Person>>转换为二维数组Person[][]*/
	public static Person[][] getArrayPerson2(List<List<Person>> list){
		Person[][] ps = new Person[list.size()][];
		for (int i = 0; i < list.size(); i++) {
			ps[i] = list.get(i).toArray(new Person[list.get(i).size()]);
		}
		return ps;
	}
	
	/*将每个部门的对象保存到各自的ArrayList<Person>中,再将所有的ArrayList<Person>保存到List<List<Person>>*/
	public static List<List<Person>> getLists(String[] set, List<Person> persons){
		List<List<Person>> list = new ArrayList<List<Person>>();
		
		for(int j=0;j<set.length;j++){
			List<Person> pp = new ArrayList<Person>();
			for(int x=0;x<persons.size();x++){
				Person p = persons.get(x);
				if(p.getComparny().equals(set[j])){						
					pp.add(p);
				}
			}
			list.add(pp);
	}
		
		return list;
	}
	
	/*获取部门,将其存在一个String[]中*/
	public static String[] getCompany(List<Person> list){
		Set<String> sets = new HashSet<String>();
		for (Person person : list) {
			sets.add(person.getComparny());
		}
		String[] set = new String[sets.size()];
		Iterator<String> it = sets.iterator();
		int i = 0;
		while(it.hasNext()){
			set[i]=it.next();
			i++;
		}
		return set;
	}
	
	/*数据模拟*/
	public static List<Person> getPersons(){
    	List<Person> persons = new ArrayList<Person>();
    	
    	Person p1 = new Person();	Person p2 = new Person();
    	p1.setId("10010");	p2.setId("10011");
    	p1.setName("小李");	p2.setName("小杨");
    	p1.setComparny("县防办");	p2.setComparny("县防汛指挥部");
    	p1.setPosition("副厅长");	p2.setPosition("厅长");
    	p1.setAddress("镇海1");	p2.setAddress("镇海1");
    	p1.setMobile("13734334323");	p2.setMobile("13134334323");
    	p1.setTelephone("8219324");	p2.setTelephone("8219324");
    	
    	Person p3 = new Person();	Person p4 = new Person();
    	p3.setId("10012");	p4.setId("10011");
    	p3.setName("小催");	p4.setName("小橘");
    	p3.setComparny("县防办");	p4.setComparny("乡防办");
    	p3.setPosition("副厅长");	p4.setPosition("厅长");
    	p3.setAddress("镇海1");	p4.setAddress("镇海2");
    	p3.setMobile("13834334323");	p4.setMobile("13534334323");
    	p3.setTelephone("8219324");	p4.setTelephone("8219324");
    	
    	Person p5 = new Person();	Person p6 = new Person();
    	p5.setId("10012");	p6.setId("10011");
    	p5.setName("小刘");	p6.setName("小姜");
    	p5.setComparny("县防汛指挥部");	p6.setComparny("乡防办");
    	p5.setPosition("副厅长");	p6.setPosition("厅长");
    	p5.setAddress("镇海1");	p6.setAddress("镇海2");
    	p5.setMobile("13834334323");	p6.setMobile("13534334323");
    	p5.setTelephone("8219324");	p6.setTelephone("8219324");
    	
    	persons.add(p1);	persons.add(p2);	persons.add(p3);	persons.add(p4);
    	persons.add(p5);	persons.add(p6);
    	return persons;
    }
}

POJO类
package test;

public class Person {
	private String id;
	private String name;
	private String comparny;
	private String position;
	private String address;
	private String mobile;
	private String telephone;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getComparny() {
		return comparny;
	}
	public void setComparny(String comparny) {
		this.comparny = comparny;
	}
	public String getPosition() {
		return position;
	}
	public void setPosition(String position) {
		this.position = position;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	public String getTelephone() {
		return telephone;
	}
	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}
	
}
1 楼 jsjtzq 2011-10-26  
请问能不能将List<Person>对象转换成二维数组呢?该怎么转?
2 楼 宋建勇 2011-11-22  
这个不行,List<Person>只是单个列表,只能转换成一维数组,因为它没有包含双列表,可参考一下方法,该方法和上面介绍的getArrayPerson2是一样的道理。
public static void listTest(){
ArrayList<Integer> l1 = new ArrayList<Integer>();
l1.add(1);
l1.add(2);
l1.add(3);

ArrayList<Integer> l2 = new ArrayList<Integer>();
l2.add(4);
l2.add(5);
l2.add(6);

ArrayList<ArrayList<Integer>> l = new ArrayList<ArrayList<Integer>>();

l.add(l1);
l.add(l2);

for(int i=0;i<l.size();i++){
System.out.println(l.toArray()[i]);
}

}

该方法的输出运行结果是:

[1, 2, 3]
[4, 5, 6]