Java Stream Api - 是否可以保留原始map()输入?

时间:2015-03-10 09:24:19

标签: java java-8 java-stream

我理解map()操作不会保持状态,但是在某些情况下这可能会有所帮助,例如:

List<String> somePageLinks = ... //populate the list

//crawl those pages
somePageLinks.stream().map( link -> CrawlerFactory.getCrawler( link ).
                       forEach( crawler.getContent( link );

问题是&#34;链接&#34;不再适用于forEach()。有什么方法可以克服这个问题吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

一种方法是将link存储在CrawlerFactory.getCrawler (link)创建的实例中,这样您就不必再次将link传递给crawler.getContent

另一种方法是map生成某种“Pair”对象,该对象包含linkCrawlerFactory.getCrawler (link)返回的实例。这将使link方法中的crawlerforEach都可用。

答案 1 :(得分:0)

好的,我当然可以省略map()......

somePageLinks.stream().forEach( link -> {
                CrawlerFactory.getCrawler( link ).getContent( link );
            });

答案 2 :(得分:0)

你可能想要查看Stream上的.peek()方法,就像forEach需要一个Consumer,但保持Stream不受影响。因此,您可以在.map

之前使用.peek()
myStream.peek(link -> consume(link)).map(link -> transform(link));