Java 读取csv、对两列求和、输出到新csv的程序

Java 读取csv、对两列求和、输出到新csv的程序,java,csv,Java,Csv,我已经有1-2年没有使用java了,请耐心等待。我的项目是读取包含销售数据的csv文件。文件中的数据包括“产品ID”列和“已售出单位”。我基本上必须用各自的产品ID汇总销售的单位,并将其打印出来,并将重复的产品ID打印到新的csv文件中 这是我到目前为止所做的,它读取csv并打印出数据 我基本上是在寻找答案或建议,从这里开始(不是实际的代码)。我正在考虑将每一列放入两个不同的数组,按“产品ID”排序,然后添加售出的单位 public class ReadCSV { public static

我已经有1-2年没有使用java了,请耐心等待。我的项目是读取包含销售数据的csv文件。文件中的数据包括“产品ID”列和“已售出单位”。我基本上必须用各自的产品ID汇总销售的单位,并将其打印出来,并将重复的产品ID打印到新的csv文件中

这是我到目前为止所做的,它读取csv并打印出数据

我基本上是在寻找答案或建议,从这里开始(不是实际的代码)。我正在考虑将每一列放入两个不同的数组,按“产品ID”排序,然后添加售出的单位

public class ReadCSV {

public static void main(String[] args) {

    ReadCSV obj = new ReadCSV();
    obj.run();
  }

  public void run() {

    String csvFile = "C:/Users/Jeff/Desktop/SalesData.csv";
    BufferedReader br = null;
    String line = "";
    String csvSplitBy = ",";

    try {

        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {

                // use comma as separator
            String[] units = line.split(csvSplitBy);

            System.out.println(  units[1]+ 
                     " "+ units[2] + "");





        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    System.out.println("Done");
  }

}
下面是我的一些示例输出:

Product ID Units
10002 4
10004 6
10008 2
10010 3
提前谢谢你

我正在考虑将每列放入两个不同的数组中

用地图代替。您可以创建
地图
。创建
Product
类,如果您有多个具有唯一
productId
的属性,则该类可以具有类似
productId
units
的属性。如果您不想使用map,您可以为
productId
unit
选择
List
,并将每个条目添加到这两个不同的列表中

按“产品ID”排序,然后添加已售出的单位

如果您使用的是列表,则在循环后使用
list.sort()
对列表进行排序。必须使用
Long.parseLong
String
unit[0]
units[1]
)转换为
Long


对不起,我应该指定我的指令是使用数组

数组应使用fix width初始化,并保持不变,直到再次初始化引用。这是你最关心的问题。您无法确定将有多少产品,如果您的文件有固定数量的行或产品,您可以使用数组,但我仍然建议您使用内部使用数组的
List

如果只想使用数组,则必须使用较大的大小。假设您的文件中有max
1000
产品,您可以将其初始化为

long productId[] = new long[1000];

最大大小数组的问题是它占用了大量内存,您应该避免这样做。

我将使用下面的hashmap,然后迭代hashmap并将它们写入文件

while((line = reader.readLine()) != null){
        //Split and parse to int before
        if(map.get(productId) == null){
            map.put(productId,units);
        }
        else{
            map.put(productId, units + map.get(productId));
        }
    }

您可能会考虑使用类似的方法生成一些波霍,将数据分组在一起,这将是一个简单的问题,使用自定义<代码>比较器< /代码>进行排序。我只是想了解这一切,因为我已经有一段时间没做过了。老实说,我甚至不知道如何开始。