У меня есть данные в Excel следующим образом:
Orgs Bill
Org1 1.0
Org2 2.0
Org3 3.0
Org3 8.0
Org2 10.0
Org1 12.0
Результат, который я хочу получить, суммирует значения, соответствующие аналогичным организациям:
Орг1: 13.0
Орг2: 12,0
Орг3: 11,0
Я могу добиться этого с помощью приведенного ниже кода. Просто хочу узнать, есть ли лучший способ сделать это.
List<String> duplicateOrgs = new ArrayList<String>();
LinkedHashSet<String> orgs;
LinkedHashMap<String, Float> orgsAndSum = new LinkedHashMap<String, Float>();
File file = new File("C:\\Users\\Himanshu Chand\\Desktop\\OrgData\\OrgDataLarge.xls");
FileInputStream inputStream = new FileInputStream(file);
Workbook workbook = null;
workbook = new HSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheet("Sheet1");
int rowCount = sheet.getLastRowNum()-sheet.getFirstRowNum();
for (int i = 1; i < rowCount+1; i++)
{
Row row = sheet.getRow(i);
duplicateOrgs.add(row.getCell(0).getStringCellValue()); //here i am looping through the first column and storing all the orgs in a list.
}
orgs= new LinkedHashSet<String>(duplicateOrgs); //storing the list into set to get unique orgs.
Iterator value = orgs.iterator();
while (value.hasNext())
{
String org=(String) value.next();
float sum=0;
for (int i = 1; i < rowCount+1; i++)
{
Row row = sheet.getRow(i);
if(org.equals(row.getCell(0).getStringCellValue()))
{
sum=(float) (sum+row.getCell(1).getNumericCellValue()); //now comparing the set of orgs with the first column and summing the bill wherever there is a match.
}
}
orgsAndSum.put(org, sum);
}
for (Entry<String, Float> entry : orgsAndSum.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
}
}