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

原创 2015年11月19日 16:24:02

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

}

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA读写CSV文件(包括arraylist遍历)

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi...
  • dongweionly
  • dongweionly
  • 2015年01月20日 10:14
  • 1192

CSV文件准确读取两种思路

通过查询网上资料,发现有两种解析思路:a.通过pattern分割各字段,b.逐字符读取并判断,当然还有通过第三方Jar包来解析的方法。...
  • okyoung188
  • okyoung188
  • 2017年01月09日 14:13
  • 1109

导入csv文件时,如果最后一列没有数据,读取出来的集合比抬头字段少,和数据中包含","如何处理?

当时项目是需要导入csv文件进行处理后存入数据库持久化,在读取一行数据时,遇到了如下两个问题: 1, 因为csv文件每列数据读取出来后是一串由","号分隔的字符串,所以想将字符串变为数组(集合)时用...
  • y_hai_yang
  • y_hai_yang
  • 2017年04月10日 17:20
  • 532

c语言写csv

csv文件格式其实就是字符串之间是用tab(即"")
  • dai_jing
  • dai_jing
  • 2014年06月14日 11:03
  • 5407

VC之CSV文件操作

CSV文件格式 CSV即Comma Separate Values,这种文件格式经常用来作为不同程序之间的数据交互的格式。 具体文件格式: 每条记录占一行  以逗号为分隔符  逗...
  • bingdianlanxin
  • bingdianlanxin
  • 2015年04月18日 17:55
  • 3056

c++读写操作CSV文件

/***************************************************************************************************...
  • maweifei
  • maweifei
  • 2017年04月25日 11:37
  • 615

R语言——read.table;read.csv(读取外部数据)

使用R语言的时候,如果是少量数据,不妨使用c()或其他函数进行创建;但是对于大量数据,最好还是先通过其他更方便的软件创建数据文件,然后使用R读入这个文件。 前文说,.csv是非常好的数据文件格式,跨平...
  • AnneQiQi
  • AnneQiQi
  • 2016年04月07日 14:28
  • 42017

List数据生成CSV文件

Function Index() As ActionResult             dataOutPut = New List(Of Categories)()             Di...
  • jsjpanxiaoyu
  • jsjpanxiaoyu
  • 2016年08月16日 17:47
  • 1162

unity3d读取csv文件

在mac os下写过手游程序的应该都清楚csv文件,它类似于excel表格文件,但csv文件里的数据是以逗号分隔的。unity3d并未提供直接读取csv文件的方法,那怎么办呢,没关系,很简单,下面看我...
  • stormbjm
  • stormbjm
  • 2014年05月07日 12:57
  • 8364

c++较好程序:读取csv文件

class file_reader_t { private:     ifstream input; public:     trace_reader_t(string filename)     ...
  • qqliyunpeng
  • qqliyunpeng
  • 2016年07月25日 18:00
  • 1168
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java读取csv数据到list缓存,并对list集合分组统计结果
举报原因:
原因补充:

(最多只允许输入30个字)