我正在尝试编写一个加载数据的Java程序(来自制表符分隔的DAT文件)并确定以欧元(EUR)为单位的平均金额,按国家和信用评级分组。
我有2个问题,
更新:我已经初步尝试了,这就是实现的样子。感觉有一个改进的空间。
/**
* @param rows - Each row as a bean
* This method will group objects together based on Country/City and Credit Rating
*/
static void groupObjectsTogether(List<CompanyData> rows) {
Map<String, List<CompanyData>> map = new HashMap<String, List<CompanyData>>();
for(CompanyData companyData : rows){
String key;
if(companyData.getCountry().trim().equalsIgnoreCase("") || companyData.getCountry() == null){
key = companyData.getCity()+":"+companyData.getCreditRating(); //use city+creditRating as key
}else{
key = companyData.getCountry()+":"+companyData.getCreditRating(); //use country+creditRating as key
}
if(map.get(key) == null){
map.put(key, new ArrayList<CompanyData>());
}
map.get(key).add(companyData);
}
processGroupedRowsAndPrint(map);
}
答案 0 :(得分:0)
这一切都取决于机器的数据量和性能(CPU与内存)。它的数据量不重要(少于数百万条记录或列)并且列数是固定的,那么您可以使用
简单地将所有数据放入数组中String[] row = String.split(";");
将使用分割每一行;作为分隔符。然后,您可以使用HashMap实现分组功能,即:
ArrayList<String[]> rowAr = new ArrayList<String[]>();
HashMap<String,ArrayList<Integer>> map = new HashMap<String,ArrayList<Integer>>();
int index = 0;
for (String rowStr: rows) {
String[] row = rowStr.split(";");
rowAr.add(row);
String companyCode = row[0];
//please keep in mind that for simplicity of the example I avoided
//creation of new array if it does not exist in HashMap
((ArrayList<Integer>)map.get(companyCode)).add(index);
index++;
}
很抱歉上面的任何语法或其他简单错误(我手边没有任何工具来验证是否有任何愚蠢的错误)。