Java 将流值与所有列表值进行比较时出现流过滤器问题

Java Stream Filter issue comparing a streamed value to all list value

Here is a pic because newbie to Whosebug

我遇到了一些小问题,需要一些帮助。

私人

我的问题出在这一行

私人

列表中充满了一些 "whitelisted" 的 ID,我想将当前的 ID(流式传输)与列表的所有值进行比较。并且只有当该值与列表 ID 之一匹配时,才进入下一步。 感谢您的帮助。

如果 quizList 是 Java 集合那么它没有 get 方法。在您的过滤器中检查 current.getId() 是否存在于 quizList 中,您可以使用流来做到这一点

.filter(current -> quizList.stream()
    .anyMatch( quiz -> Objects.equals( current.getId(), quiz.getId() ) ) )

请停止在任何地方使用流

.filter(quizList::contains)

对具有给定类别的每个测验对象进行顺序搜索 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()))
  // ...