Java8 Stream: собирать элементы после выполнения условия - программирование
Подтвердить что ты не робот

Java8 Stream: собирать элементы после выполнения условия

Мой POJO выглядит следующим образом

class EventUser {
  private id;
  private userId;
  private eventId;
}

Я извлекаю объект EventUser следующим образом:

List<EventUser> eventUsers = eventUserRepository.findByUserId(userId);

Скажем, "eventUsers" выглядит следующим образом:

[
{"id":"id200","userId":"001","eventId":"1010"},
{"id":"id101","userId":"001","eventId":"4212"},
{"id":"id402","userId":"001","eventId":"1221"},
{"id":"id301","userId":"001","eventId":"2423"},
{"id":"id701","userId":"001","eventId":"5423"},
{"id":"id601","userId":"001","eventId":"7423"}
]

Используя потоковое вещание и без использования какой-либо промежуточной переменной, как я могу фильтровать и собирать события после определенного EventUser.id: ex:

List<EventUser> filteredByOffSet = eventUsers.stream.SOMEFILTER_AND_COLLECT("id301");

результат должен быть:

[{"id":"id301","userId":"001","eventId":"2423"},
{"id":"id701","userId":"001","eventId":"5423"},
{"id":"id601","userId":"001","eventId":"7423"}]
4b9b3361

Ответ 1

В Java 8 вам нужен фильтр состояния

public static <T> Predicate<T> from(Predicate<T> test) {
    boolean[] found = { false };
    // once found, always true
    return t -> found[0] || (found[0] = test.test(t));
}

ПРИМЕЧАНИЕ. Это имеет смысл только для потоков с одиночной резьбой.

List<EventUser> filteredByOffSet = 
     eventUsers.stream()
               .filter(from(e -> "id301".equals(e.getId()))
               .collect(Collectors.toList());

Ответ 2

Используйте " dropWhile " из Java 9.

Ответ 3

Сначала найдите индекс элемента поиска:

int asInt = IntStream.range(0, list.size())
    .filter(userInd-> list.get(userInd).equals(<criteria>))
    .findFirst()
    .getAsInt();

Получать товары по индексу и после него:

list.stream().skip(asInt).collect(Collectors.toList());

Ответ 4

Вы не можете сделать это без использования каких-либо промежуточных переменных. нахождение позиции и повторение ее до конца (см. ниже этот вопрос, ответьте более точно) введите описание ссылки здесь