转换为lamda表达式

时间:2018-06-05 16:28:22

标签: java-8 java-stream

我试图弄清楚是否有办法将其转换为java 8流/过滤器表达式。

        List<IChangelistSummary> bugChanges ........ 
        for (IChangelistSummary bugChange : bugChanges)
        {
            IChangelist changeInfo = server.getChangelist(bugChange.getId());
            List<IFileSpec> fileSpecs = changeInfo.getFiles(true);
            boolean canAccept = false;
            for (IFileSpec fileSpec : fileSpecs)
            {
                if (fileSpec.getDepotPathString().contains("release1234"))
                {
                    canAccept = true;
                    break;
                }
            }
            if (canAccept)
            {
                System.out.println("bugChange="+ bugChange.getId() + "=="+ bugChange.getDescription());
            }
        }

我已经使用java 8 stream / filter来获取&#39; bugChanges&#39;的实例,但我无法弄清楚如何将以下代码转换为java 8.

感谢。

2 个答案:

答案 0 :(得分:1)

有2个for-loops和2个if条件。它可能被外流和内流取代。

 Option<IChangelistSummary> summary = bugChanges.stream()
            .filter(bugChange -> server
                                    .getChangelist(bugChange.getId())
                                    .getFiles(true)
                                    .stream()
                                    .anyMatch( spec ->
                                            spec.getDepotPathString()
                                                .contains("release1234")
                                    )
            )
            .forEach(bug -> 
              System.out.println( 
                "bugChange="+ bug.getId() + "=="+ bug.getDescription())
              )
             );

这看起来有点难看。在外部流中,我们检查bugChange个元素,只留下满足过滤器Predicate的元素。现在,在内部流中,我们验证与当前bug id关联的文件是否包含"release1234"字符串。最后我们打印结果。

答案 1 :(得分:0)

您需要使用flatMap

捕获初始值,直至结束
bugChanges.stream().flatMap(bugChange -> Stream.of(server.getChangelist(bugChange.getId()))
        .map(changeInfo -> changeInfo.getFiles(true))
        .filter(fsList -> fsList.stream().anyMatch(fs -> fs.getDepotPathString().contains("release1234")))
        .map(fs -> bugChange)).forEach(bugChange -> System.out.println("bugChange="+ bugChange.getId() + "=="+ bugChange.getDescription()));