今天遇到一个问题,需要将以上的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();
}
}
}
}
由此,问题解决。当然在实际处理中,我得把得到的数据入库。