我理解map()操作不会保持状态,但是在某些情况下这可能会有所帮助,例如:
List<String> somePageLinks = ... //populate the list
//crawl those pages
somePageLinks.stream().map( link -> CrawlerFactory.getCrawler( link ).
forEach( crawler.getContent( link );
问题是&#34;链接&#34;不再适用于forEach()。有什么方法可以克服这个问题吗?
谢谢!
答案 0 :(得分:2)
一种方法是将link
存储在CrawlerFactory.getCrawler (link)
创建的实例中,这样您就不必再次将link
传递给crawler.getContent
。
另一种方法是map
生成某种“Pair”对象,该对象包含link
和CrawlerFactory.getCrawler (link)
返回的实例。这将使link
方法中的crawler
和forEach
都可用。
答案 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));