// 跳过表头,否则也会被读取
csvReader.readHeaders();
while (csvReader.readRecord()) {
int columns = csvReader.getColumnCount();
int countersNum = this.CounterIDs.length;
// 把counterId对应的值分别组织到对应的list中
for (int i = 0; i < countersNum; i++) {
String counterValue = csvReader.get(columns - countersNum + i);
String counterId = this.CounterIDs[i];
List counterValuesList = new ArrayList();
counterValuesList.add(counterValue);
if (counterIdMap.get(counterId) == null) {
counterIdMap.put(counterId, counterValuesList);
} else {
List tempList = (List) counterIdMap.get(counterId);
tempList.add(counterValue);
}
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// 跳过表头
csvReader.readHeaders();
while (csvReader.readRecord()) {
int columns = csvReader.getColumnCount();
// counterId映射value的map
Map<String, Double> counterIdWithValue = new HashMap<String, Double>();
// 把counterId与对应的值组织到map里
for (int i = 0; i < countersNum; i++) {
counterIdWithValue
.put(this.CounterIDs[i], Double.valueOf(csvReader.get(columns - countersNum + i)));
}
// 把"开始时间"作为一个key
String granularityKey = csvReader.get(1);
// 把“RNC Managed NE”、“NodeB”、“本地小区标识”的值拼成key
String areakey = csvReader.get(4) + "_" + csvReader.get(8) + "_" + csvReader.get(10);
// 判断当前的时间粒度分组在timeKeymap中是否存在
// 如果不存在将其作为一个key,再将当前“小区”和对应的“性能值”放入“valueMap”中
Map valueMap = new HashMap<String, Map<String, Double>>();
valueMap.put(areakey, counterIdWithValue);
// 如果为空,那么新创建的map就是“时间粒度key”对应的值
if (mapElementsGroupByGranularity.get(granularityKey) == null) {
mapElementsGroupByGranularity.put(granularityKey, valueMap);
} else {
// 如果不为空,通过“时间粒度key”得到对应map值,把属于同一时间粒度的小区性能化为一组
Map valueMAP = (HashMap<String, Map<String, Double>>) mapElementsGroupByGranularity
.get(granularityKey);
valueMAP.put(areakey, counterIdWithValue);
}
}