首页 > 编程语言 >Java怎么统计每个项目下的每个类别的数据

Java怎么统计每个项目下的每个类别的数据

时间:2024-07-12 11:20:05浏览次数:7  
标签:category Map Java 每个 name 类别 new public String

为了演示如何在Java中统计每个项目下的每个类别的数据,我们可以考虑一个简单的场景:假设我们有一个电商系统,需要统计每个商品分类在每个店铺下的销售数量。这里我们将使用Java的集合框架,如HashMapArrayList,来存储和统计数据。

1.使用Java的集合框架HashMapArrayList来存储和统计数据

首先,我们需要定义几个类来模拟这个场景:Shop(店铺),Category(商品分类),以及一个SaleItem(销售项),用于表示某个店铺下某个分类的商品销售情况。

import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
  
class Shop {  
    private String name;  
  
    public Shop(String name) {  
        this.name = name;  
    }  
  
    // getter and setter  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    @Override  
    public String toString() {  
        return "Shop{" +  
                "name='" + name + '\'' +  
                '}';  
    }  
}  
  
class Category {  
    private String name;  
  
    public Category(String name) {  
        this.name = name;  
    }  
  
    // getter and setter  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    @Override  
    public String toString() {  
        return "Category{" +  
                "name='" + name + '\'' +  
                '}';  
    }  
}  
  
class SaleItem {  
    private Shop shop;  
    private Category category;  
    private int quantity;  
  
    public SaleItem(Shop shop, Category category, int quantity) {  
        this.shop = shop;  
        this.category = category;  
        this.quantity = quantity;  
    }  
  
    // getters  
    public Shop getShop() {  
        return shop;  
    }  
  
    public Category getCategory() {  
        return category;  
    }  
  
    public int getQuantity() {  
        return quantity;  
    }  
}  
  
public class SalesStatistics {  
  
    public static void main(String[] args) {  
        // 示例数据  
        Shop shop1 = new Shop("店铺A");  
        Shop shop2 = new Shop("店铺B");  
        Category category1 = new Category("电子产品");  
        Category category2 = new Category("服装");  
  
        List<SaleItem> sales = new ArrayList<>();  
        sales.add(new SaleItem(shop1, category1, 10));  
        sales.add(new SaleItem(shop1, category2, 5));  
        sales.add(new SaleItem(shop2, category1, 8));  
        sales.add(new SaleItem(shop2, category2, 12));  
  
        // 统计每个店铺下的每个类别的销售数量  
        Map<Shop, Map<Category, Integer>> statistics = new HashMap<>();  
  
        for (SaleItem item : sales) {  
            Shop shop = item.getShop();  
            Category category = item.getCategory();  
            int quantity = item.getQuantity();  
  
            // 如果店铺尚未在统计中,则初始化该店铺的统计信息  
            if (!statistics.containsKey(shop)) {  
                statistics.put(shop, new HashMap<>());  
            }  
  
            // 更新统计信息  
            Map<Category, Integer> categoryStats = statistics.get(shop);  
            categoryStats.put(category, categoryStats.getOrDefault(category, 0) + quantity);  
        }  
  
        // 打印统计结果  
        for (Map.Entry<Shop, Map<Category, Integer>> entry : statistics.entrySet()) {  
            Shop shop = entry.getKey();  
            System.out.println("店铺: " + shop.getName());  
            for (Map.Entry<Category, Integer> categoryEntry : entry.getValue().entrySet()) {  
                Category category = categoryEntry.getKey();  
                Integer quantity = categoryEntry.getValue();  
                System.out.println("  分类: " + category.getName() + ", 数量: " + quantity);  
            }  
        }  
    }  
}

这个示例中,我们首先定义了三个类:ShopCategorySaleItem。然后,在SalesStatistics类的main方法中,我们创建了一些示例数据,并使用嵌套的HashMap来统计每个店铺下每个类别的销售数量。最后,我们遍历这个嵌套。

2. 使用Java的Map接口及其实现类来完成这项任务示例

我将提供一个稍微不同但同样详细的代码示例,用于统计每个项目(在这个例子中,我们可以将其视为“产品”)下的每个类别(比如“电子产品”下的“手机”和“电脑”)的销售数据。我们将使用Java的Map接口及其实现类(如HashMap)来完成这项任务。

import java.util.HashMap;  
import java.util.Map;  
  
class ProductCategory {  
    private String productName; // 产品名(这里可以视为项目)  
    private String category; // 类别  
  
    public ProductCategory(String productName, String category) {  
        this.productName = productName;  
        this.category = category;  
    }  
  
    // Getter 和 Setter 省略,为了简洁  
    public String getProductName() {  
        return productName;  
    }  
  
    public String getCategory() {  
        return category;  
    }  
  
    @Override  
    public String toString() {  
        return "ProductCategory{" +  
                "productName='" + productName + '\'' +  
                ", category='" + category + '\'' +  
                '}';  
    }  
}  
  
class SaleRecord {  
    private ProductCategory productCategory;  
    private int quantity; // 销售数量  
  
    public SaleRecord(ProductCategory productCategory, int quantity) {  
        this.productCategory = productCategory;  
        this.quantity = quantity;  
    }  
  
    // Getter 省略,为了简洁  
    public ProductCategory getProductCategory() {  
        return productCategory;  
    }  
  
    public int getQuantity() {  
        return quantity;  
    }  
}  
  
public class SalesStatisticsExample {  
  
    public static void main(String[] args) {  
        // 创建一些销售记录  
        SaleRecord record1 = new SaleRecord(new ProductCategory("iPhone", "手机"), 100);  
        SaleRecord record2 = new SaleRecord(new ProductCategory("MacBook", "电脑"), 50);  
        SaleRecord record3 = new SaleRecord(new ProductCategory("Galaxy S21", "手机"), 80);  
        SaleRecord record4 = new SaleRecord(new ProductCategory("ThinkPad", "电脑"), 70);  
  
        // 存储销售统计数据的Map  
        // Key: ProductName (产品名),Value: 另一个Map,其中Key: Category (类别),Value: 销售数量  
        Map<String, Map<String, Integer>> salesStatistics = new HashMap<>();  
  
        // 填充销售统计数据  
        addSaleRecord(salesStatistics, record1);  
        addSaleRecord(salesStatistics, record2);  
        addSaleRecord(salesStatistics, record3);  
        addSaleRecord(salesStatistics, record4);  
  
        // 打印销售统计数据  
        printSalesStatistics(salesStatistics);  
    }  
  
    // 辅助方法:向销售统计数据中添加销售记录  
    private static void addSaleRecord(Map<String, Map<String, Integer>> statistics, SaleRecord record) {  
        ProductCategory productCategory = record.getProductCategory();  
        String productName = productCategory.getProductName();  
        String category = productCategory.getCategory();  
  
        // 如果产品尚未在统计中,则初始化该产品的统计信息  
        if (!statistics.containsKey(productName)) {  
            statistics.put(productName, new HashMap<>());  
        }  
  
        // 更新统计信息  
        Map<String, Integer> categoryStats = statistics.get(productName);  
        categoryStats.put(category, categoryStats.getOrDefault(category, 0) + record.getQuantity());  
    }  
  
    // 辅助方法:打印销售统计数据  
    private static void printSalesStatistics(Map<String, Map<String, Integer>> statistics) {  
        for (Map.Entry<String, Map<String, Integer>> entry : statistics.entrySet()) {  
            String productName = entry.getKey();  
            Map<String, Integer> categoryStats = entry.getValue();  
  
            System.out.println("产品: " + productName);  
            for (Map.Entry<String, Integer> categoryEntry : categoryStats.entrySet()) {  
                String category = categoryEntry.getKey();  
                int quantity = categoryEntry.getValue();  
                System.out.println("  类别: " + category + ", 数量: " + quantity);  
            }  
        }  
    }  
}

在这个例子中,我们定义了两个辅助类ProductCategorySaleRecord,分别用于表示产品类别和销售记录。然后,在SalesStatisticsExample类中,我们创建了一些销售记录,并使用嵌套的HashMap来统计每个产品下的每个类别的销售数量。

标签:category,Map,Java,每个,name,类别,new,public,String
From: https://www.cnblogs.com/TS86/p/18297935

相关文章

  • 关于Java内存区域的理解和记录
    近期做项目遇到了FullGC的问题,干脆总结一下Java内存区域分布和垃圾回收是咋回事。Java内存区域按照线程隔离状态直接分成三大块空间:线程私有:程序计数器是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器。在虚拟机概念模型里,字节码解释器工作时就是通过改变这......
  • Java中的递归算法详解
    Java中的递归算法详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!1.什么是递归算法?递归算法是指在函数的定义中使用函数自身调用的方法。在算法中,递归通常用于解决可以被拆分为相似子问题的问题,每个子问题都是原始问题的一部分。2.递归算法的基本......
  • Java中的反序列化详解
    Java中的反序列化详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!1.什么是反序列化?反序列化是将对象的字节序列转换回对象的过程。在Java中,对象序列化是将对象转换为字节序列以便存储或传输,而反序列化则是将这些字节序列重新转换为对象。2.Java中......
  • Java Redis多限流
    JavaRedis多限流在Java中实现Redis多限流通常涉及使用Redis的某些特性,如INCR、EXPIRE、Lua脚本或者更高级的Redis数据结构如RedisBitmaps、RedisStreams结合RedisPub/Sub,或者使用Redis的第三方库如RedisRateLimiter(基于Lua脚本或Redis自身功能实现)。然而,为了直接和易于实现......
  • Java中的排序算法详解
    Java中的排序算法详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!1.排序算法概述排序算法是计算机科学中的基础问题,它将一组元素按照特定的顺序重新排列。在实际开发中,选择合适的排序算法可以显著提高程序的性能。2.冒泡排序(BubbleSort)冒泡排序......
  • 【热门】Java银行交易处理系统讲解【含源代码】
    本作品由老程个人著作,经供参考以下是一个关于Java银行交易处理系统的简要讲解:系统概述:银行交易处理系统是一个复杂但关键的应用程序,用于处理各种金融交易,如存款、取款、转账、账户查询等。主要功能模块:1.用户账户管理:开户:创建新的用户账户,包括收集个人信息、设置......
  • Java毕业设计基于Vue+SpringBoot的电影院订票选座管理系统(代码+数据库+文档LW+运行成
    很多朋友发现后期找不到文章,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍在飞速发展的今天,网络已成为人们重要的交流平台。电影院每天都有大量的需要通过网络发布,为此,本人开发了一个基于B/S;浏览器/服务器;模式的电影院管理系统。该系......
  • Java毕业设计基于Vue+SpringBoot的畅游游戏销售平台(代码+数据库+文档LW+运行成功)
    很多朋友发现后期找不到文章,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,畅游游戏销售平台利用计算机网络实现信息化管理,使整个畅游游戏销售平......
  • Java毕业设计基于Vue+SpringBoot的爱看漫画小程序(代码+数据库+文档LW+运行成功)
    很多朋友发现后期找不到文章,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低爱看漫画的运营人员成本,实现了爱看漫画的标准化、制度化、程序化的管理,有效地防止了爱看漫画的随意管......
  • 经典再现,回顾常见排序算法之冒泡排序,附Java源码及优化改进实现
    回顾一下排序算法,老酒装新瓶,给自己的技能点做个回放。排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个有序的序列,也可以理解为高矮个站队。衡量排序算法的两个指标,时间复杂度和稳定性。举个例子,如果我们的数据......