Поиск в массиве для диапазона LocalDateTime - PullRequest
0 голосов
/ 18 ноября 2018

Требуется некоторая помощь с кодом для возврата диапазона дат из arrayList после ввода пользователя.

ArrayList mainList

static ArrayList<LEntry> mainList = new ArrayList();

public LEntry(LocalDateTime date, String id)
    2018-10-23T12:05:22 A2315
    2017-01-13T10:09:30 A2253
    2018-05-10T18:55:30 V1225
    2018-05-03T17:44:50 R9952
    2017-06-15T16:25:31 A2253

Мой неудачный код:

private static ArrayList<LogEntry> range() {
    String sDate, eDate;
    LocalDateTime startDate, endDate;

    System.out.println("Start date:\n");
    sDate = in.nextLine().replace(" ", "T");
    System.out.println("End date:\n");
    eDate = in.nextLine().replace(" ", "T");

    //System.out.println(eDate);
    startDate = LocalDateTime.parse(sDate, DateTimeFormatter.ISO_DATE_TIME);
    endDate = LocalDateTime.parse(eDate, DateTimeFormatter.ISO_DATE_TIME);

    mainList.stream().filter(i -> i.date ?? ((startDate.isBefore(i.date))&&(endDate.isAfter(i.date))).forEach(j -> Ranges.add(0, j));

    return Ranges;
}

Я пытаюсь использовать isBefore и isAfter для получения моего диапазона, но так как они возвращают true / false, у меня возникают некоторые проблемы при интеграции его в мой код.

Моя цель состоит в том, чтобы получить LEntries между указанными датами.
Спасибо за любую помощь.

Решено , спасибо @ user7

mainList.stream()
    .filter(i -> startDate.isBefore(i.date) && endDate.isAfter(i.date))
    .forEach(j -> Ranges.add(0, j));

1 Ответ

0 голосов
/ 18 ноября 2018

Вы были почти там

 mainList.stream()
        .filter(i -> startDate.isBefore(i.date) && endDate.isAfter(i.date))
        .forEach(i -> {
             //your code
            });
...