我从CSV文件中读取以下数据。
Pedro|groceries|apple|1.42
Nitin|tobacco|cigarettes|15.00
Susie|groceries|cereal|5.50
Susie|groceries|milk|4.75
Susie|tobacco|cigarettes|15.00
Susie|fuel|gasoline|44.90
Pedro|fuel|propane|9.60
我想将每个客户的费用分组,如
佩德罗的费用:
杂货 - 1.42 燃料 - 9.62
我还希望将每个客户的费用总和分组,如
每位客户的总费用为:
佩德罗 - (1.42 + 9.60) Nitin - 15.00 苏西 - (5.50 + 4.75 + 15.00 + 44.90)
有人可以帮助我如何对元素进行分组并对其值进行求和。
我能够读取文件并打印单独的值。我为每个小组成员绘制了他们的费用。但不知道如何总结他们的价值观
有人可以帮助我吗?
这是我的代码,我确定这是不正确的
static String[] inputArray ;
public static void main(String[] args) throws IOException {
groceryReport gr = new groceryReport();
try {
gr.readFile();
System.out.println(gr.customerPurchase(inputArray).toString());
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@SuppressWarnings("null")
private void readFile() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\....\\grocery.csv"));
String input= "";
try{
System.out.println("The total revenue for each customer is:");
while((input = br.readLine()) != null )
{
inputArray= input.split("\\|");
}
}
catch(Exception e){
e.printStackTrace();
}
finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public String customerPurchase(String[] inputArray){
String sum = "" ; float sum1=0; float sum2 = 0;
ArrayList<String[]> alist = new ArrayList<String[]>();
alist.add(inputArray);
String value = "";
System.out.println(alist);
Map<String, String> map = new HashMap<String, String>();
map.put(inputArray[0], inputArray[3]);
System.out.println(map.get(inputArray));
Iterator ite = map.entrySet().iterator();
while (ite.equals("Susie"))
ite.next();
value = map.get("Susie");
sum = sum+ value;
return sum;
}
答案 0 :(得分:0)
在面向对象语言中,当您想要对特定数据片段进行分组时,可以通过使用类来完成。 我假设这是一个家庭作业,所以我无法提供全部细节。但是你想要一个包含所需信息字段的人员类。从那里你可以找到完全输出你想要的方法吗?
答案 1 :(得分:0)
我的解决方案可以找到here,但我会给你一个简短的细分。
首先,我创建了一个类名Purchase
作为csv文件中每一行的抽象。这只是一个简单的类,可以将购买周围的信息(项目类型,特定项目和价格)组合在一起。
createReport
方法将csv行作为输入,并将返回数据结构Map<String, List<Purchase>
,地图的关键将是人员的名称及其相关购买。如果我想获取 Pedro 所做的所有购买,我只需使用mapVariable.get("Pedro");
,它将返回所有Pedro购买的List<Purchases>
。
因此,在sum
方法中可以看到,找到Pedro购买的总和是一项简单的任务。
这最终会给出一个如下所示的报告:
---------------------------------------
Name. Nitin
---------------------------------------
tobacco 15.0
---------------------------------------
Total: 15.0
---------------------------------------
---------------------------------------
Name. Pedro
---------------------------------------
groceries 1.42
fuel 9.6
---------------------------------------
Total: 11.02
---------------------------------------
---------------------------------------
Name. Susie
---------------------------------------
groceries 5.5
groceries 4.75
tobacco 15.0
fuel 44.9
---------------------------------------
Total: 70.15
---------------------------------------