在Java 8中,有没有一种使用流(Streams)合并两个for循环的方法?

5

我有两个列表,一个是字符串类型,另一个是某个实体对象。如何使用Java 8遍历这两个列表或进行比较。

List<Admin> admin= new ArrayList<>();

for (Admin ah : subProducers) {
    for (String value : values) {
        if (ah.getFirstName().contains(value) || ah.getLastName().contains(value)) {
            admin.add(ah);
        }
    }
}

我目前正在使用 for 循环来验证条件,但我没有找到更好的方法来使用 Java 8 stream 结合它。


1
你正在将一个管理员对象多次添加到列表中? - Samuel Philipp
1
一个有趣的练习,主要是因为很明显你已经拥有的代码比任何使用流的代码更清晰。 - VGR
但这就是你的代码所做的。如果“values”是[“John”,“Smith”],那么名为“John”和姓为“Smith”的“Admin”将被添加两次。当“values”是[“J”,“o”,“h”,“n”]时,同一个“Admin”甚至会被添加四次。 - Holger
@holger 不,它只添加一个管理员。即使我们像您的情况一样提供了某些内容,它也只需要一个管理员。 - Jeeva D
@JeevaD 就试试吧。 - Holger
显示剩余3条评论
1个回答

8

类似于带有嵌套流的anyMatch

subProducers.stream()
            .filter(a -> values.stream()
                               .anyMatch(b -> a.getFirstName().contains(b)
                                           || a.getLastName().contains(b)))
            .collect(Collectors.toList())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接