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

今天遇到一个问题,需要将以上的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();
			}
        }
	}

}

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值