I am reading a .txt file and it needs to be able to update the entry with the products key 5020 in product map, increasing the count of purchases by 2. So far I am able to do it by the costumer map, but I need to make another display by the product map too.
Whenever I try to do it the same way as my customers map i don't get all the entries in my file. I have to use HashMap and I am unfamiliar with it.
I think the problem lies in the if statement for the products map.
public class StoreSales {
public static void main(String[] args) {
List<Customer> customer = new ArrayList<>();
try {
readFile("Sales.txt", customer);
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println(customer);
}
public static void readFile(String file, List<Customer> cust) throws IOException, ClassNotFoundException {
Map<Integer, Customer> customers = new HashMap<>();
Map<Integer, Customer> product = new HashMap<>();
try (BufferedReader in = new BufferedReader(new FileReader(file))) {
String line;
while ((line = in.readLine()) != null) {
String[] arr = line.split(" ");
cust.add(new Customer(Integer.parseInt(arr[0]), arr[1], arr[2],
Integer.parseInt(arr[3]), arr[4], Double.parseDouble(arr[5]),
Integer.parseInt(arr[6])));
if (customers.containsKey(Integer.parseInt(arr[0]))) {
Customer c = customers.get(Integer.parseInt(arr[0]));
customers.get(Integer.parseInt(arr[0])).getSingleItemPrice();
c.addTotal(Double.parseDouble(arr[5]) * Integer.parseInt(arr[6]));
customers.put(Integer.parseInt(arr[0]), c);
} else {
customers.put(Integer.parseInt(arr[0]),
new Customer(Integer.parseInt(arr[0]), arr[1], arr[2],
Integer.parseInt(arr[3]), arr[4], Double.parseDouble(arr[5]),
Integer.parseInt(arr[6])));
}
if (product.containsKey(Integer.parseInt(arr[3]))) {
Customer p = product.get(Integer.parseInt(arr[3]));
customers.get(Integer.parseInt(arr[3])).getItemsPurchased();
p.addTotal(Double.parseDouble(arr[5]) * Integer.parseInt(arr[6]));
product.put(Integer.parseInt(arr[3]), p);
} else {
product.put(Integer.parseInt(arr[3]),
new Customer(Integer.parseInt(arr[0]), arr[1], arr[2],
Integer.parseInt(arr[3]), arr[4], Double.parseDouble(arr[5]),
Integer.parseInt(arr[6])));
}
}
}
}
}
this is the file:
1001 Martha Washington 5001 dress 120 1
1002 John Adams 5002 shirt 55 3
1002 John Adams 5003 tie 20 2
1003 George Washington 5003 tie 20 1
1004 Benjamin Franklin 5010 hat 60 1
1005 Abigail Adams 5020 blouse 45 2
1005 Abigail Adams 5013 skirt 80 1
1004 Benjamin Franklin 5015 coat 500 1
1004 Benjamin Franklin 5012 umbrella 15 1
1006 Deborah Read 5001 dress 120 2
1007 Robert Livingston 5003 tie 20 1
1002 John Adams 5010 hat 60 1
1001 Martha Washington 5014 gloves 20 1
1005 Abigail Adams 5014 gloves 20 2
1006 Deborah Read 5012 umbrella 15 4
1006 Deborah Read 5013 skirt 80 1
1004 Benjamin Franklin 5003 tie 20 5
1006 Deborah Read 5007 jacket 70 1
1001 Martha Washington 5013 skirt 80 1
1003 George Washington 5015 coat 500 1
1007 Robert Livingston 5008 pants 75 1
First of all, it is a bit unclear what you are asking, and the code is difficult to read. So I suggest you simplify your code this way to start with, it is easier to read and will simplify the debugging:
Also these 2 lines seem to be doing nothing (if they are proper getters)
and
I can't see where you do your incrementation by 2 that you are talking about.
Also can you define what are the 7 values from the file that you use to construct your customer and give an example of the
Sales.txtfile which would create the problem.What I think the issue is:
The suspicion is that you have several products for the same customer.
Your
customersmap has thecustomerIdas key and theCustomeras value, so assuming you have unique ids, you will have one entry per customer.In your
productsMap you havecustomerIdas key and theProductas value. If a customer has several products, then you are trying to put all the products of a customer at the same key, and they replace each other, so you will have less entries. You probably wantproductsto beMap<Integer, List<Customer>>so you have a list of Customer for each ProductIdA possible solution:
Here is the same code but using a
Map<Integer, List<Customer>>for the productsMapI used a file you provided, it generates the following maps