Start learning free

LESSON 163 OF 410 · PROJECTS: EVERYDAY PROGRAMS

Shopping Cart V6 - Group by Category in Java

Practice

Use a HashMap to accumulate totals per category while looping over parallel arrays, then list the categories sorted by name.

You start with:

String[] items = {"Apple", "Bread", "Shirt", "Banana", "Pants"};
int[] prices = {2, 3, 25, 1, 40};
String[] categories = {"Food", "Food", "Clothes", "Food", "Clothes"};

Build:

Clothes: $65
Food: $6

Rules:

  • Build a HashMap totals that maps each category to the sum of the prices of its items.
  • Loop with an index. For each item, add its price to the total of categories[i]; a category you have not seen yet counts as 0.
  • Make one line per category, in the format "Category: $total", sorted alphabetically by category name (so Clothes comes before Food).
  • Join the lines with a newline "\n" into one string result, then print it with System.out.println(result).

Use totals.getOrDefault(cat, 0) + prices[i] to accumulate without checking for missing keys.

Copy the keys into a list and call Collections.sort on it, then loop over the sorted list.

String[] items = {"Apple", "Bread", "Shirt", "Banana", "Pants"};
int[] prices = {2, 3, 25, 1, 40};
String[] categories = {"Food", "Food", "Clothes", "Food", "Clothes"};

HashMap<String, Integer> totals = new HashMap<>();
for (int i = 0; i < items.length; i++) {
    String cat = categories[i];
    totals.put(cat, totals.getOrDefault(cat, 0) + prices[i]);
}
List<String> lines = new ArrayList<>();
List<String> keys = new ArrayList<>(totals.keySet());
Collections.sort(keys);
for (String cat : keys) {
    lines.add(cat + ": $" + totals.get(cat));
}
String result = String.join("\n", lines);
System.out.println(result);

STEP 1 OF 11
    Ctrl + Enter to check

    Shopping Cart V6 in Java

    Keep going with JavaAbout 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free