小计从csv文件导入的arraylist

时间:2019-11-27 06:56:19

标签: java list arraylist subtotal

我正在为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 |%10s\n";
        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();
}




}

2 个答案:

答案 0 :(得分:0)

代替在循环中读取值时打印值,而是将其添加到arraylist中。然后根据类别类型对数据进行排序。请参阅Java中的comparablecomparator。 现在,您可以简单地遍历列表,并继续计算每个类别的小计。

有用的链接:Comarator v/s Comparable

答案 1 :(得分:0)

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

  2. 遍历排序后的列表并保留小计。

  3. 如果某个项目与上一个项目不在同一类别中,则发出小计行并清除小计值。 (您还必须在最后一行之后执行一次。)

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

要发出总计,只需保留另一个总计,每行更新一次,从不清除。