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()))
// ...
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()))
// ...