对从 csv 文件导入的数组列表进行小计



>我正在为Java编码课做一个学校项目,需要一些帮助

我已经导入了一个CSV文件,其中包含一些信息,这些信息已被分成一个ArrayList,并希望对文件中的每个不同类别进行汇总。

现在我的输出是:

Item       |  Category |    Amount |     Price |  Location
Carrots    |      Food |        12 |        $2 |   Walmart
Potatoes   |      Food |        15 |        $3 |   Walmart
T-Shirt    |   Clothes |         1 |       $16 |   Walmart
Toothbrush |  Cleaning |         2 |        $2 |   Walmart

我的目标是获取每个类别的小计,例如:

Item       |  Category |    Amount |     Price |  Location
Carrots    |      Food |        12 |        $2 |   Walmart
Potatoes   |      Food |        15 |        $3 |   Walmart
Subtotal for Food is: $69
T-Shirt    |   Clothes |         1 |       $16 |   Walmart
Subtotal for Clothes is: $16
Toothbrush |  Cleaning |         2 |        $2 |   Walmart
Subtotal For Cleaning is: $4

然后最终将整个事情汇总到最后并显示如下:

Item       |  Category |    Amount |     Price |  Location
Carrots    |      Food |        12 |        $2 |   Walmart
Potatoes   |      Food |        15 |        $3 |   Walmart
Subtotal for Food is: $69
T-Shirt    |   Clothes |         1 |       $16 |   Walmart
Subtotal for Clothes is: $16
Toothbrush |  Cleaning |         2 |        $2 |   Walmart
Subtotal For Cleaning is: $4
Total is: $89

这是我现在的代码:

public static void main(String[] args) {
ArrayList<output> csvstuff = new ArrayList<output>();
String fileName = "Project2.csv";
File file = new File(fileName); 
try {
Scanner inputStream = new Scanner(file);
while(inputStream.hasNext()) {
String data = inputStream.next();
String[] values= data.split(",");
String Item = values[0];
String Category = values[1];
String Amount = values[2];
String Price = values[3];
String Location = values[4];
String format = "%-10s |%10s |%10s |%10s |%10sn";
System.out.printf(format, values[0], values[1], values[2], values[3], values[4]);

output _output = new output(Item,Category,Amount,Price,Location);
csvstuff.add(_output);
}
inputStream.close();
} 
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

与其在循环中读取时打印值,不如像以前一样将其添加到 arraylist 中。然后根据类别类型对数据进行排序。请参阅 java 中的comparablecomparator。 现在,您可以简单地迭代列表并继续计算每个类别的小计。

有用的链接: Comarator v/s 可比

  1. 按类别对所有行进行排序。

  2. 浏览排序列表并保留小计计数。

  3. 如果项目与前一个项目属于不同的类别,请发出小计行并清除小计值。(您还必须在最后一行之后执行此操作一次。

  4. 然后发出一行描述当前行。

要发出总计,只需保留另一个随每行更新且从未清除的总计。

相关内容

  • 没有找到相关文章

最新更新