关闭

java读取csv数据到list缓存,并对list集合分组统计结果

标签: java分组统计list
2005人阅读 评论(0) 收藏 举报
分类:

今天遇到一个问题,需要将以上的csv表格数据(A列数据为设备的ip,B列数据为对应的设备端口号),读入list缓存,并对list根据左边ip数据分组统计每组ip数据的数据量(即每种ip有几个端口)。经过思考后,代码实现过程如下:

1、创建数据的javabean对象

2、读取csv数据存入list集合,list数据类型为之前创建的javabean对象

3、创建Map<ip字符串, 对象集合> map = new HashMap<ip字符串, 对象集合>();循环遍历list将list中的对象存入map中的对象集合。这样就将list中的数据分组统计在map集合中了。实现代码如下:

javabean对象:

public class Dkinfo{
        private String sbip;
	private String dk;
        public String getSbip() {
		return this.sbip;
	}

	public void setSbip(String sbip) {
		this.sbip = sbip;
	}

	public String getDk() {
		return this.dk;
	}

	public void setDk(String dk) {
		this.dk = dk;
	}
}
具体实现过程:

package Test;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;



public class TestWcSsv {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		List<Dkinfo> dkinfos = new ArrayList<Dkinfo>();//保存读取csv得到的数据
		Map<String, List<Dkinfo>> map = new HashMap<String, List<Dkinfo>>();//分组统计的map集合  
		
		String sbip = null;
		List<Dkinfo> mapDkinfos = new ArrayList<Dkinfo>();//map集合中每组ip的对应的对象集合
		BufferedReader reader = null;
		//读写csv数据到list(dkinfos)集合中
		try {
            reader = new BufferedReader(new FileReader("E:/my.csv"));//换成你的文件名
            String line = null;
            while((line=reader.readLine())!=null){
                    String data[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分
                	Dkinfo dkinfo = new Dkinfo();
                	dkinfo.setSbip(data[0]);
                	dkinfo.setDk(data[1]);
                	dkinfos.add(dkinfo);
                	System.out.println(data[0]+","+data[1]);
            }
            //遍历集合,将数据分组存入map集合
            for(Dkinfo dkinfo : dkinfos){
            	sbip = dkinfo.getSbip();
            	mapDkinfos = map.get(sbip);//获取对应sbip的集合,第一次获取时为空
            	if(mapDkinfos == null){//这里如果不进行为空判断,会报空指针异常
            		mapDkinfos = new ArrayList<Dkinfo>();
            	}
            	mapDkinfos.add(dkinfo);//将新添加的对象加入到对应的sbip的对象集合
            	map.put(sbip, mapDkinfos); //将每次新添加对象后的对象集合存入对应map中 
            }
            //遍历map集合
            for (Map.Entry<String, List<Dkinfo>> entry : map.entrySet()) {
            	System.out.println("设备ip = " + entry.getKey() + ", 端口数 = " + entry.getValue().size());
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
        	try {
				reader.close();
				dkinfos.clear();
				map.clear();
				mapDkinfos.clear();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        }
	}

}

由此,问题解决。当然在实际处理中,我得把得到的数据入库。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38704次
    • 积分:716
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:35篇
    • 译文:0篇
    • 评论:2条