使用强大的ChatGpt4.0模型辅助编程写代码

 今天遇到个业务问题,原型上要求按省、市 进行层级划分返回仓库列表数据

仓库与仓库之间并没有上下级的关系,只是按省名称、市名称进行层级划分

 新手程序员一时之间没想出来要怎么处理数据,然后我打开了ChatGpt试了试

我的提问:

public class WarehouseVO extends BaseVO {

    /**
     * 仓库名
     */
    @TableField("warehouse_name")
    private String warehouseName;

    /**
     * 省
     */
    @TableField("province")
    private String province;

    /**
     * 市
     */
    @TableField("city")
    private String city;

    /**
     * 详细地址
     */
    @TableField("detail_address")
    private String detailAddress;

}

查询数据库得到的是,List<WarehouseVO>,构建出省、市层级划分的数据

ChatGpt4.0模型的回答:

构建一个省、市层级划分的数据结构,可以采用采用Java的Map结构来对数据进行组织。如果你拥有一个List<WarehouseVO>, 其中 WarehouseVO 包含了省、市、详细地址等信息,那么你可以创建一个嵌套的Map(例如,一个省对应一个包含多个市的Map,每个市又对应一个包含多个仓库详细地址的列表)。

以下是一个基本的Java示例代码,展示了如何从 List<WarehouseVO> 构建省市层级结构:

Java 代码示例:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        // 模拟从数据库获取的数据
        List<WarehouseVO> warehouses = new ArrayList<>();
        warehouses.add(new WarehouseVO("Warehouse A", "Guangdong", "Shenzhen", "Nanshan"));
        warehouses.add(new WarehouseVO("Warehouse B", "Guangdong", "Guangzhou", "Tianhe"));
        warehouses.add(new WarehouseVO("Warehouse C", "Zhejiang", "Hangzhou", "Xihu"));
        
        // 使用 Map 嵌套结构组织数据
        Map<String, Map<String, List<WarehouseVO>>> organizedData = new HashMap<>();
        
        for (WarehouseVO warehouse : warehouses) {
            organizedData
                .computeIfAbsent(warehouse.getProvince(), k -> new HashMap<>())
                .computeIfAbsent(warehouse.getCity(), k -> new ArrayList<>())
                .add(warehouse);
        }

        // 输出查看结果
        organizedData.forEach((province, cities) -> {
            System.out.println(province + ":");
            cities.forEach((city, warehouseList) -> {
                System.out.println("  " + city + ":");
                warehouseList.forEach(wh -> {
                    System.out.println("    - " + wh.getWarehouseName() + ", " + wh.getDetailAddress());
                });
            });
        });
    }
}

在这个例子中,我首先创建了一个示例数据列表,然后使用了Java 8的Map.computeIfAbsent方法来简洁地构建和维护数据结构。每个省份和城市作为键存储,在这个基础上列表存储具体的 WarehouseVO 实例。

这种层级结构使得数据在逻辑上易于理解和操作,并且在需要时,可以容易地根据省份或城市获取相关的仓库信息。这样的数据结构也便于实现例如基于省份或城市的筛选功能。

然后我去查看了对应方法的源码,看源码立马就明白了

完美解决问题,把代码写上去提交

    @Override
    public Map<String, Map<String, List<WarehouseVO>>> getTree() {
        // 查询数据库得到仓库列表
        List<WarehouseVO> warehouseVOList = this.list();

        // 使用 Map 嵌套构建数据
        Map<String, Map<String, List<WarehouseVO>>> organizedData = new HashMap<>();
        for (WarehouseVO warehouseVO : warehouseVOList) {
            organizedData
                    .computeIfAbsent(warehouseVO.getProvince(), k -> new HashMap<>())
                    .computeIfAbsent(warehouseVO.getCity(), k -> new ArrayList<>())
                    .add(warehouseVO);
        }

        // 返回数据
        return organizedData;
    }

一个聪明的程序员都是善于使用工具的!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值