Получить ближайшую дату, ближайшую к целевой дате, если она найдена в ту же секунду, иначе верните ближайшую дату к целеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Получить ближайшую дату, ближайшую к целевой дате, если она найдена в ту же секунду, иначе верните ближайшую дату к целе

Сообщение Anonymous »

Этот вопрос является продолжением моего предыдущего сообщения.
У меня есть два поля даты:
дата начала (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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»