我已经做了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
提前谢谢!
答案 0 :(得分:1)
我正在考虑将每列放入两个不同的数组
改用地图。您可以创建Map<Long, Product>
。如果您有多个具有唯一Product
的属性,请创建productId
类,该类可以包含units
,productId
等属性。如果您不想使用地图,可以使用List<Long>
productId
和unit
,并将每个条目添加到此两个不同的列表中。
按“产品ID”排序,然后添加已售出的单位。
如果您使用的是列表,则在循环后使用list.sort()
对列表进行排序。您必须使用Long.parseLong
将String
(unit[0]
和units[1]
)转换为Long
。
抱歉,我应该指明我认为我的说明是使用数组
应该使用固定宽度初始化数组并保持相同,直到再次重新初始化引用。这是您案件中的主要问题。您无法确定将有多少产品,如果您的文件有固定数量的行或产品,您可以使用数组,但我仍然建议您使用List
而不是内部使用数组。
如果您只想使用数组,则必须使用大尺寸。假设您的文件中包含最多1000
个产品,您可以将其初始化为
long productId[] = new long[1000];
具有最大大小的数组的问题在于它占用了大量内存,您应该避免这样做。
答案 1 :(得分:0)
我会使用下面的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));
}
}