Этот вопрос является продолжением моего предыдущего сообщения.
У меня есть два поля даты:
дата начала (2021-03-07T07:37:15) и дата окончания (2021 г.). -03-07T07:37:25) и временную дату (2021-03-07T07:37:20).
У меня есть список, в котором я вернул 6 записей между датой начала и дата окончания. Как я могу отфильтровать записи и вернуть дату и время, ближайшее к временной дате?
здесь, в примерах записей, мне нужно получить третью запись, потому что 2021-03-07T07:37: 20.004 ближе всего к временной дате. Пример
2021-03-07T07:37:15.000
2021-03-07T07:37:19.999
2021-03-07T07:37:20.004
2021-03-07T07:37:20.809
2021-03-07T07:37:22.100
2021-03-07T07:37:22.814
В примере 2 мне нужно получить вторую запись, поскольку в ту же секунду не найдено записей, а 2021-03-07T07:37:19.999 ближе всего к целевой дате< /p>
2021-03-07T07:37:15.000
2021-03-07T07:37:19.999
2021-03-07T07:37:22.100
2021-03-07T07:37:22.814
2021-03-07T07:37:22.815
2021-03-07T07:37:22.816
могу ли я добиться этого, используя два фильтра? когда я попробовал использовать приведенный ниже код, он возвращает мне ноль для первого сценария. Пожалуйста, предложите public RequiredRecord findCloseRecord(List list, Date tempDate) {
Date startTime = new Date(tempDate.getTime() - 5000);
Date endTime = new Date(tempDate.getTime() + 5000);
Log.logInfo(this, "Find close record");
if (list != null && !list.isEmpty()) {
List filteredRec = list.stream()
.filter(rec -> (rec.getLogRecDateTime() != null ))
.sorted(Comparator.comparing(RequiredRecord ::getLogRecDateTime))
.collect(Collectors.toList());
if (!ClrUtils.isCollectionEmpty(filteredRec)) {
List filteredRecEqual = list.stream()
.filter(rec1 -> (rec1.getLogRecordDateTime() != null && tempDate.equals(rec1.getLogRecordDateTime()))).collect(Collectors.toList());
if (!ClrUtils.isCollectionEmpty(filteredRecEqual)) {
filteredRecEqual.get(0);
return (filteredRecEqual.get(0));
} else {
List filteredRec2 =
list.stream().sorted(Comparator.comparingLong(d -> Math.abs(tempDate.getTime() - d.getLogRecordDateTime().getTime())))
.collect(Collectors.toList());
return (filteredRec2.get(0));
}
}
return null;
}
Подробнее здесь: https://stackoverflow.com/questions/714 ... lse-return
Получить ближайшую дату, ближайшую к целевой дате, если она найдена в ту же секунду, иначе верните ближайшую дату к целе ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему на секунду отображается цена со скидкой, а через секунду — полная цена?
Anonymous » » в форуме Php - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему на секунду отображается цена со скидкой, а через секунду — полная цена?
Anonymous » » в форуме Php - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему на секунду отображается цена со скидкой, а через секунду — полная цена?
Anonymous » » в форуме Php - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-