#java
#java
Вопрос:
У меня есть блок кода, подобный приведенному ниже. Что касается условия else, я хочу добавить то, что я добавляю в totalDates
массив, как если бы это был единый массив.
public ResponseEntity<?> findByHourlyAggregated(@PathVariable String hours) {
HashMap<Date, List<Post>> map = new HashMap<Date, List<Post>>();
Date startDate = new Date();
Date date = new Date();
Timestamp endDate = null;
Date endDate = new Date();
List<Post> postAll = (List<Post>) findAll();
Instant afterHours = null;
List<Post> totalDates = new ArrayList<>();
List<Date> allDates = new ArrayList<Date>();
Date firstDate;
firstDate = postAll.get(0).getDateCreated();
for (Post p : postAll) {
startDate = p.getDateCreated(); //2020-08-11 10:42:08.0 , time of incoming data
date = new Date(firstDate.getTime() TimeUnit.HOURS.toMillis(Integer.parseInt(hours))); // Tue Aug 11 12:42:08 EET 2020
endDate = new Timestamp(date.getTime()); // 2020-08-11 12:42:08.0, add the parameter entered with the incoming data
if (firstDate.getTime() <= endDate.getTime() amp;amp; startDate.getTime() <= endDate.getTime()) {
totalDates.add(p);
}
else {
map.put(firstDate, totalDates);
firstDate.setTime(endDate.getTime()); // value of new values when values in range are exhausted
date = new Date(firstDate.getTime() TimeUnit.HOURS.toMillis(Integer.parseInt(hours))); // Adds 2 hours
endDate = new Timestamp(date.getTime());
}
}
return new ResponseEntity<>(map, HttpStatus.OK);
}
Я отделяю значение даты от данных Post в соответствии со значением параметра. Например, когда вводится значение 2, мне нужно присвоить значения от 10-12 одному массиву и значения от 12-14 другому массиву. В результате я хочу получить распечатку.
{
"2020-08-11T10:42:08.000 03:00": [
{
"id": 1,
"postBody": "Post 1",
"author": "michael",
"dateCreated": "2020-08-11T10:42:08.000 03:00"
},
{
"id": 2,
"postBody": "Post 2",
"author": "jam",
"dateCreated": "2020-08-11T10:45:21.000 03:00"
},
{
"id": 3,
"postBody": "Post 3",
"author": "jim",
"dateCreated": "2020-08-11T10:57:33.000 03:00"
},
{
"id": 4,
"postBody": "Post 4",
"author": "dwight",
"dateCreated": "2020-08-11T11:02:35.000 03:00"
},
{
"id": 5,
"postBody": "Post 5",
"author": "scott",
"dateCreated": "2020-08-11T11:52:51.000 03:00"
}
]
}
2020-08-12T12:42:08.000 03:00": [
{
...
},
{
...
}],
....
Комментарии:
1. Не могли бы вы, пожалуйста, внести больше ясности в свой вопрос?
2. в чем вопрос? Ваш список totalDates не разделен. Это то, о чем вы спрашиваете?
3. Да, я хочу разделить его как первый индекс, когда я ввожу условие else, а затем как второй индекс, когда вы вводите его снова.
Ответ №1:
Я думаю, вам следует инициализировать totalDates после инструкции map.put в блоке else. Тогда записи будут разделены на разные объекты списка totalDates.
map.put(firstDate, totalDates);
totalDates = new ArrayList<>(); // This will create a new ArrayList instance
Обновление 1
Рассмотрите возможность изменения вашей хэш-карты
HashMap<Date, List<Post>> map = new HashMap<Date, List<Post>>();
Для
HashMap<String, List<Post>> map = new HashMap<String, List<Post>>();
Ключи на карте должны быть неизменяемыми. Использование String в качестве ключа обеспечит это. Затем вы можете изменить логику put на —
map.put(firstDate.toString(), totalDates);
Надеюсь, это поможет.
Комментарии:
1. Вы имеете в виду часть totalDates.add(p)? Не могли бы вы, пожалуйста, написать короткий код?
2. Спасибо. Это работает. Я сохраняю данные первой даты в firstDate data. Я заменяю firstDate на LastDate всякий раз, когда он входит в блок else. Но последние измененные данные firstDate записываются в карту. Например, я хочу; { «2020-08-11_10»: [… Сообщения, созданные между 10-12 часами августа 11 …], «2020-08-11_12»: [… Сообщения, созданные между 12-14 часами 11 августа …], … }, должны быть в форме
3. @MichaelScott Извините, я не совсем понял вопрос. Вам нужен формат ключа карты как 2020-08-11_10 вместо 2020-08-11T10:42:08.000 03:00? Кроме того, не могли бы вы, пожалуйста, поддержать ответ. Я не мог понять, почему это было отклонено.
4. Я не голосовал против. Это выдает ошибку, когда я пытаюсь проголосовать за. Прошу прощения за это.
5. В ключевом разделе карты есть данные firstDate. Я имею в виду это; Для данных между 10-12 часами «2020-08-11T10: 42: 08.000 03: 00»: [{}], ( данные между 10-12 часами) «2020-08-11T12: 42: 08.000 03: 00»: [{}], ( данные между 12-14 часами) «2020-08-11T14: 42: 08.000 03: 00»: [{}], ( данные между 14-16 часами) … Но firstDate — это последнее значение firstDate для всех данных. «2020-08-12T02: 42: 08.000 03: 00»: [{}], «2020-08- 12T02: 42: 08.000 03: 00»: [{}], «2020-08- 12T02: 42: 08.000 03: 00»: [{}], …