按Java分组功能

时间:2014-12-10 16:48:58

标签: java string collections

我正在尝试编写一个加载数据的Java程序(来自制表符分隔的DAT文件)并确定以欧元(EUR)为单位的平均金额,按国家和信用评级分组。

我有2个问题,

  1. 分割成数组后将数据加载到数据结构的最佳方法是什么?
  2. 我如何处理在Java中提供按功能划分的群组

  3. 更新:我已经初步尝试了,这就是实现的样子。感觉有一个改进的空间。

        /**
     * @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);
    }
    

1 个答案:

答案 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++;
}

很抱歉上面的任何语法或其他简单错误(我手边没有任何工具来验证是否有任何愚蠢的错误)。