这个lambda表达式做了什么以及如何做

时间:2017-08-30 08:53:17

标签: lambda java-8

我正在学习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());
}

2 个答案:

答案 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>将始终为空。