我们可以通过使用Java 8中的流来合并这三个嵌套的for循环吗?

时间:2019-03-27 15:23:47

标签: java java-stream nested-loops

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

下面的代码是必须使用流更改的代码。

     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 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

您可能正在寻找流的flatMap():

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#flatMap-java.util.function.Function-

flatMap之后,您将获得在flatmap中创建的子流的所有元素的“拉平”流。

所以

subProducers.stream().flatMap(sp-> sp.getAdminSitCodes().stream()) 

生成所有adminSitCodes的流,而

subProducers.stream().map(sp-> sp.getAdminSitCodes().stream()) 

产生流的流。