我正在学习Java 8 Lambda表达式。我对Lambda有了基本的了解。但我不明白以下代码如何处理代码片段: -
return new Quote(quote,
stock.getQuote().getPrice()); // Confusion here.
这是否返回到.collect(Collectors.toList())
的以下函数或完全从Lambda返回。请详细说明它是如何工作的?
public List<Quote> getStock(){
List<String> quotes = new ArrayList<>();
return quotes
.stream()
.map(quote -> {
Stock stock = getStockPrice(quote);
return new Quote(quote, stock.getQuote().getPrice()); // Confusion here
})
.collect(Collectors.toList());
}
答案 0 :(得分:2)
此:
.map(quote -> {
Stock stock = getStockPrice(quote);
return new Quote(quote, stock.getQuote().getPrice());
})
输入String
作为输入并返回Quote
;它是Function<String, Quote>
。您可以通过类实现此功能:
class FromStringToQuote implements Function<String, Quote> {
public Quote apply (String quote) ...
可能会更清楚。
对于quotes
中的每个元素(String
s),您可以通过lambda表达式将这些元素映射到Quote
。
映射一个后,它被发送到Collectors.toList()
;将其收集到List
。
答案 1 :(得分:2)
从lambda返回。请记住,lambda基本上只不过是一个匿名函数。
您可以在没有Streams的情况下重写您的代码:
public List<Quote> getStock() {
List<String> quotes = new ArrayList<>();
List<Quote> returnList = new ArrayList<>();
for (String quote : quotes)
{
Quote theQuote = myLambda(quote);
returnList.add(theQuote);
}
return returnList;
}
private Quote myLambda(String quote)
{
Stock stock = getStockPrice(quote);
return new Quote(quote, stock.getQuote().getPrice());
}
您的版本中使用lambda的return
和我的版本中的return
以完全相同的方式运行。它们从函数返回以允许处理下一个引用。
值得注意的是,您的getStock
方法会创建一个新的空ArrayList,并从该列表中创建一个流。因此,结果List<Quote>
将始终为空。