我有一个名为“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));
<小时/>
关于Java 8 : Filter list inside object with another list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475050/