`

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

    博客分类:
  • Java
阅读更多
今天突然想到一个问题,即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;
	}
	
}


Map转为二维数组
	private String[][] TwoDimensionalArray(Map<String, String> map) {

		if (null == map || map.size() == 0)
			return null;

		String[][] twoDarray = new String[map.size()][2];

		String[] keys = map.keySet().toArray(new String[map.size()]);
		String[] values = map.values().toArray(new String[map.size()]);

		for (int row = 0; row < twoDarray.length; row++) {
			twoDarray[row][0] = keys[row];
			twoDarray[row][1] = values[row];
		}

		return twoDarray;

	}
分享到:
评论
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]
1 楼 jsjtzq 2011-10-26  
请问能不能将List<Person>对象转换成二维数组呢?该怎么转?

相关推荐

    《Java和Android开发实战详解》第6到10章源代码-by 南邮-陈杨

    6.2.2 二维与多维数组 99 6.2.3 可变长度的参数列表 101 6.3 字符串类 102 6.3.1 Java字符串是一种引用数据类型 103 6.3.2 字符串处理 103 6.3.3 StringBuffer类 107 6.4 字符串与数值的转换 109 ...

    java基础案例与开发详解案例源码全

    4.3.3 二维数组111 4.4 经典算法113 4.4.1 算法-冒泡排序113 4.4.2 插入排序115 4.5 增强for循环116 4.6 本章练习117 第5章 5.1 面向过程的设计思想120 5.2 面向对象的设计思想120 5.3 抽象121 5.3.1 对象的理解121 ...

    Java开发技术大全 电子版

    5.1.6二维数组的使用207 5.1.7for~each循环208 5.1.8应用程序示例1——数组排序209 5.1.9应用程序示例2——杨辉三角212 5.2字符串213 5.2.1String对象的声明213 5.2.2String对象的创建214 5.2.3String对象的...

    达内客户端+聊天室源码

    // 创建一个二维数组保存处理后的数据,其中每个一维数组中包含一个记录,每个二维数组中包含每条数据的信息 // allMsg[i][0]:标题; allMsg[i][1]:时间 allMsg[2]:处理状态 for (int i = 0; i ; i++) {// ...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    Google Android SDK开发范例大全(完整版)共4个...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    Google Android SDK开发范例大全(完整版)共4个...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    Google Android SDK开发范例大全(完整版)共4个...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

    Java开发技术大全(500个源代码).

    assignTwoDime.java 为二维数组赋值 getMaxElem.java 获取数组中的最大元素 incCapicity.java 演示StingBuffer的容量增长 SortDemo.java 排序示例 travelTwoDime.java 遍历二维数组 traversing.java 遍历一维...

    java jdk实列宝典 光盘源代码

    java为数据结构中的列表定义了一个接口类java.util.list同时提供了3个实现类,分别是ArrayList、Vector、LinkedList使用; 生成不重复的随机数序列;列表、集合与数组的互相转换;java为数据结构中的映射定义一个接口...

    Google Android SDK开发范例大全的目录

    目录 第1章 了解.深入.动手做. ...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

    Google+Android+SDK开发范例大全

    ——HttpURLConnection与Service侦测服务 第9章 Google服务与Android混搭 9.1 Google帐号验证Token——AuthSub 9.2 Google搜索——AutoCompleteTextView与GoogleSearchAPI 9.3 前端产生QRCode二维条形码——...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    Google Android SDK开发范例大全(完整版) ...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

    Google Android sdk 开发范例大全 部分章节代码

    好东西与大家同享! Google Android SDK开发范例...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

    Google Android SDK 开发范例大全01

    Google Android SDK开发范例大全 ...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

    Google Android SDK 开发范例大全02

    Google Android SDK开发范例大全 ...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

    Google Android SDK开发范例大全(完整版)

    作者简介 余志龙,来自于手机制造业、电视媒体业...10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

Global site tag (gtag.js) - Google Analytics