我们能否在Java 8中使用流将这三个嵌套的for循环合并?

3

尝试使用Streams将以下代码转换时,我遇到了一些错误。我无法使用Streams将其转换。我无法通过使用Streams合并for循环。

以下代码是需要使用Streams更改的代码。

     for (Admin ah : subProducers) {
                List<String> wns = ah.getAdminSitCodes().stream()
                        .map(new SitCodeMap()).map(Pair::getFirst)
                        .distinct().collect(Collectors.toList());

                for (String wn : wns) {
                    for (String value : values) {
                        if (wn.equals(value)) {
                            admin.add(ah);
                        }
                    }
                }
            }

我已经尝试了如下方法:

     admin = subProducers.stream().map(sp-> sp.getAdminSitCodes().stream()
                  .map(new SitCodeMap())

     .map(Pair::getFirst).distinct()).collect(Collectors.toList())
                    .stream()
                   .filter(wns->values.stream().anyMatch(v- 
      >wns.equals(v)))
                   .collect(Collectors.toList());

必须使用流将此内容转换为列表
2个回答

1
你可以使用 Set 集合来存储 values,然后按如下代码完成:
List<Admin> admin = subProducers.stream()
        .filter(a -> a.getAdminSitCodes().stream()
                .map(new SitCodeMap())
                .map(Pair::getFirst) // assuming this is Stream<String>
                .distinct()
                .anyMatch(values::contains))
        .collect(Collectors.toList());

0

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