У меня есть таблица, известная как клиент, в которой есть столбец с именем create_time, так что на самом деле я хочу построить карту таким образом, чтобы я мог сказать, в каком году и в каком месяце сколько клиентов добавлено? и теперь спросим, предположим, в ноябре 2018 года было добавлено 2 клиента, а в декабре 2018 года добавлено 0 клиентов, поэтому в декабре я также покажу 2 (как в предыдущих месяцах + текущий месяц), и если в январе 2019 года добавится 1 клиент,я покажу 3 и так далее
ТАК, чтобы решить эту проблему, я создал hashMap, в котором первый ключ - год, и я сделал еще одну hashMap, в которой ключ - месяц, а затем номер клиента, который являетсядобавлен, например, 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<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));
}
}
}