Java 如何使用<;的哈希映射添加增量值;整数,HashMap<;整数,整数>;

Java 如何使用<;的哈希映射添加增量值;整数,HashMap<;整数,整数>;,java,spring-boot,spring-data-jpa,hashmap,Java,Spring Boot,Spring Data Jpa,Hashmap,我有一个名为client的表,其中有一列名为created_time,所以实际上我想绘制一个地图,这样我就可以知道在哪一年和哪一个月添加了多少个客户端?现在的问题是假设2018年11月增加了2个客户,2018年12月增加了0个客户,因此12月我也将显示2个(与上述月份+当前月份类似),如果2019年1月增加了1个客户,那么我将显示3个,以此类推 因此,为了解决这个问题,我创建了一个hashMap,其中第一个键是year,我制作了另一个hashMap,其中键是month,然后是添加的客户端号,例如

我有一个名为client的表,其中有一列名为created_time,所以实际上我想绘制一个地图,这样我就可以知道在哪一年和哪一个月添加了多少个客户端?现在的问题是假设2018年11月增加了2个客户,2018年12月增加了0个客户,因此12月我也将显示2个(与上述月份+当前月份类似),如果2019年1月增加了1个客户,那么我将显示3个,以此类推

因此,为了解决这个问题,我创建了一个hashMap,其中第一个键是year,我制作了另一个hashMap,其中键是month,然后是添加的客户端号,例如hashMap>

预期输出::

clientsByMonth": {
                    "2018": {
                        "10": 1,(1 client added in oct)
11,1( as 0 client added in nov)
12,2( as 1 client added in december)
                    },
                    "2019": {
                        "1": 2,   ( as no client added )
                        "2": 4,   (as 2 client added)
                        "3": 5,
                        "4": 5
                    }
HashMap clientsByYear=newhashmap();
List clientList=clientRepository.findAll();
对于(int i=0;i=0;j--){
if(clientByMonth.containsKey(j)){
clients=clients+clientByMonth.get(j);
打破
}
}
clientByMonth.put(月,(客户+1));
}else if(clientByMonth.containsKey(月)){
int clients=clientByMonth.get(月);
clientByMonth.put(月,(客户+1));
}
}
}

请参见下文,如果我正确理解了您的问题,应该可以解决您的问题

  • 迭代所有客户端
  • 如果年度地图不包含它,则添加
  • 否则从yearmap获取现有条目
  • 添加以迭代计数器作为最新值的月份映射

  • 用于(int i=1;i Hi Vatsal-你的程序面临什么问题?你有没有遇到任何错误。没有,我没有遇到任何错误,只是没有正确地总结,我得到了错误的输出谢谢你的努力,但我必须每月添加客户数量,这就是我遇到的问题,所以这给了我一个正确的输出在2018年10月,有2个客户,但如果11月没有新增客户,我需要显示上个月的价值,如果新增,则上个月的客户数量+本月的新客户数量,我现在就知道了。因此,8月的客户数量将是11月客户数量的基础,这是仅在该年吗?我的意思是,是2018年12月的价值,传递给J2019年?正确?如果为真,数据列表是否按时间排序?是和是,值也将传递到2019年1月,并将继续添加,就像在2018年尝试编写伪代码一样。请原谅。检查答案,假设数据在进入循环之前按月/年排序。感谢您的努力,是列表只有2018年及其月份符合要求,然后是2019年及其月份符合要求
    
        HashMap<Integer, HashMap<Integer, Integer>> clientsByYear = new HashMap<>();
        List<Client> clientList = clientRepository.findAll();
    
        for (int i = 0; i < clientList.size(); i++) {
    
            Instant instant = Instant.ofEpochMilli(clientList.get(i).getCreatedTime().getTime());
            LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
            Integer month = localDateTime.toLocalDate().getMonth().getValue();
            Integer year = localDateTime.toLocalDate().getYear();
    
            if (!clientsByYear.containsKey(year)) {
                HashMap<Integer, Integer> clientByMonth = new HashMap<>();
                clientByMonth.put(month, 1);
                clientsByYear.put(year, clientByMonth);
            } else {
                HashMap<Integer, Integer> clientByMonth = clientsByYear.get(year);
                if (!clientByMonth.containsKey(month)) {
                    int clients = 0;
                    for (int j = month - 1; j >= 0; j--) {
                        if (clientByMonth.containsKey(j)) {
                            clients = clients + clientByMonth.get(j);
                            break;
                        }
                    }
                    clientByMonth.put(month, (clients + 1));
                } else if (clientByMonth.containsKey(month)) {
                    int clients = clientByMonth.get(month);
                    clientByMonth.put(month, (clients + 1));
                }
            }
        }
    
    for (int i = 1; i <=clientList.size() ; i++) {
            ...
    
         if (!clientsByYear.containsKey(year)) {
                HashMap<Integer, Integer> clientByMonth = new HashMap<>();
                clientByMonth.put(month, i);
                clientsByYear.put(year, clientByMonth);
            } else {
                HashMap<Integer, Integer> clientByMonth = clientsByYear.get(year);
                clientByMonth.put(month, i);
            }
          }
        System.out.println(clientsByYear);
      }