Quick actions

cmd+k|ctrl+k

Navigation

Languages

GroupingBy Exercise

Snippet info

Language

Java

Visibility

public

Author

hospino11

Created

2026-01-20T04:52:58.773828Z

Updated

2026-01-20T04:52:58.773828Z

import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.Arrays;
import java.util.stream.Collectors;

class Main {
    public static void main(String[] args) {
        List<Item> items = Arrays.asList(
            new Item("Mouse", 15.0),
            new Item("Keyboard", 25.0),
            new Item("Mouse", 30.0),
            new Item("Keyboard", 120.0),
            new Item("Mouse", 10.0)
        );
        
        Map<String, Integer> itemsCountByName = items.stream()
                .map(Item::getName)
                .collect(Collectors.groupingBy(name -> name, TreeMap::new, Collectors.summingInt(n -> 1)));
                
        itemsCountByName.forEach((k,v) -> System.out.println(k + ": " + v));
                
        Map<String, Double> averagePricePerProduct = items.stream()
                .collect(Collectors.groupingBy(Item::getName, TreeMap::new, Collectors.averagingDouble(Item::getPrice)));
                
        averagePricePerProduct.forEach((k,v) -> System.out.println(k + ": " + String.format("%.2f", v)));
        
        Map<String, Double> totalPerCategory = items.stream()
                .collect(Collectors.groupingBy(item -> getCategory(item.getPrice()), Collectors.summingDouble(Item::getPrice)));
        
        final String[] categories = {"Cheap", "Moderate", "Expensive"};
        
        for(String category : categories) {
            System.out.println(category + ": " + String.format("%.2f", totalPerCategory.get(category)));
        }
    }
    
    private static String getCategory(double price) {
        if (price < 20) {
            return "Cheap";
        } else if (price >= 20 && price <= 100) {
            return "Moderate";
        }
        
        return "Expensive";
    }
}
INFO