Java 8 : Filter list inside object with another list

标签 java list loops java-stream

我有一个名为“foodList”的列表,其中包含“Food”类型的元素。对象 Food 包含一个名为“categories”、类型为“Category”的列表。

我目前正在实现一种搜索算法,通过排除某些类别来过滤食物。

排除的类别存储在名为“excludedCategories”的列表中。

如何使用 Java 8 和流,通过排除类别列表包含排除类别列表中任何元素的食物对象来过滤 foodList?

带循环的示例代码:

for (Food f: foodList)
{
     for (Category c: f.categories)
     {
          if (excludedCategories.contains(c))
          {
               // REMOVE ITEM FROM foodList
          }
     }
}

谢谢!

最佳答案

流不应该用于修改列表。相反,您应该返回一个新的 List,其中仅包含适当的元素。您可以简单地翻转一下逻辑并使用过滤器:

foodList.stream().flatMap(e -> e.categories.stream())
                 .filter(c -> !excludedCategories.contains(c))
                 .collect(Collectors.toList());

但是使用内置方法会简单得多:

foodList.removeIf(e -> !Collections.disjoint(e.categories, excludedCategories));
<小时/>

Collections::disjoint

Collections::removeIf

关于Java 8 : Filter list inside object with another list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475050/

相关文章:

css - 垂直列表子菜单定位问题

python - 从列表中的子列表中查找公共(public)元素

java - 对 For 循环中的数字求和

java - lucene删除记录,已弃用?

Java 编译时出现一般错误 : "type argument is not within bounds of type-variable T"

java - 有条件 :action in spring

java - 策略模式和命令模式的区别

java - 无法获取Java中特定索引中的对象

java - 用于计算单词数组中单词出现次数的循环

excel - 使用 VBA 的 Z 因子迭代