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。有人可以在这里帮助我吗?我需要更多的想法来克服这个