1

csv的格式是

第 1 行:c1、c2、c3、c4、c5

第 2 行:1、a、b、c、d

第 3 行:1、n、b、c、l

第 4 行:2、j、k、c、l

第 5 行:3、a、i、v、i

第 6 行:1、a、b、c、d

第 7 行:1、a、b、u、i

分组应该在 c1,c2,c3 列的基础上进行,如果这三个列的值都相同,则将其分组如下:

GROUP1:第 2 行和第 7 行相同,地图应为 Map(Map(String, String),Map(String, String))

即一个键{c1,1},{c2,a},{c3,b}(再次键值对)

具有多个值作为

{c4,c},{c5,d}(键值对)

{c4,u},{c5,i}(键值对)

GROUP2:第 3 行的列值不同,因此地图应为

键{c1,1}{c2,n}{c3,b}

值{c4,c}{c5,l}

第 7 行应添加到错误映射中,因为第 2 行与第 2 行相同

最终地图应该是 Map of(group.Num,Objects)

列名应从属性文件中选取,如下所示。

public class app3 {
    public static void main(String args[]) throws IOException {
        File CSV_FILE_PATH = new File("csv.csv");
            CsvMapReader mapReader = null;
            try {
                    mapReader = new CsvMapReader(new FileReader(CSV_FILE_PATH), CsvPreference.STANDARD_PREFERENCE);
                    final String[] header = mapReader.getHeader(true);
                    final CellProcessor[] processors = getProcessors();
                    Map<String, Object> customerMap;
                    Map<Integer,Map<String, Object>> finalMap = new HashMap<Integer,Map<String, Object>>();
                    while( (customerMap = mapReader.read(header, processors)) != null ) {
                            finalMap.put(mapReader.getLineNumber(), customerMap); 
                    }
                    } 
            }
            finally {
                    if( mapReader != null ) {
                            mapReader.close();
                    }
            }
    }
    private static CellProcessor[] getProcessors() throws IOException {

        InputStream input = new FileInputStream("fileAttributesconfig.properties");
        Properties prop= new Properties();
            prop.load(input);
        CellProcessor[] processors=new CellProcessor[prop.size()];

        for(int i=0; i< prop.size(); i++){
                  processors[i]=new Optional();
         }

        return processors;
    }
    }

已经进行了多次试验,但 group by 仅由 8 支持,但特别是我需要使用 java 7。有人可以在这里帮助我吗?我需要更多的想法来克服这个

4

0 回答 0