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; }}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是一样的道理。