Проблема фильтра потока Java, сравнивающая потоковое значение со всеми значениями списка - PullRequest
0 голосов
/ 25 октября 2018

Вот изображение, потому что новичок в Stackoverflow

Мне нужна помощь по небольшому вопросу, у меня есть рН.

личное

Моя проблема в этой строке

private

Список заполнен некоторыми идентификаторами, которые находятся в "белом списке", и я хотел бы сравнить текущий идентификатор (потоковый) со всеми значениямииз списка.И только если значение совпадает с одним из идентификаторов списка, разрешите перейти к следующему шагу.Спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Пожалуйста, прекратите использование потоков везде

.filter(quizList::contains)
0 голосов
/ 25 октября 2018

Выполнение последовательного поиска quizList для каждого объекта Викторины с данной категорией ухудшает производительность.

Вам нужно преобразовать quizList в Set для более быстрого поиска.

Set<Integer> quizIds = quizList.stream()
  .map(Quiz::getId)
  .collect(Collectors.toSet());

return hibernateQuizJpaRepository.findAllByCategorySetContaining(new HibernateQuizCategory(quizCategoryId))
  .stream()
  .filter(current -> quizIds.contains(current.getId()))
  // ...
0 голосов
/ 25 октября 2018

Если quizList является коллекцией Java, то у нее нет метода get.В вашем фильтре, чтобы проверить, существует ли current.getId() в quizList, вы можете использовать потоки, чтобы сделать это

.filter(current -> quizList.stream()
    .anyMatch( quiz -> Objects.equals( current.getId(), quiz.getId() ) ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...