Java 流中缺少 return 语句

3 java lambda java-stream

我有以下列表和地图:

final List<Product> productList = productService.findAll(uuidList);

Map<UUID, Product> productMap = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

我想将元素对添加到地图中,如下所示:

productList.stream().map(product -> {
    productMap.put(product.getUuid(), product);
});
Run Code Online (Sandbox Code Playgroud)

但是,最后一行抛出“缺少返回语句”错误。当我如下图更新的时候就没有了,但是这次return没用。那么,我应该如何添加UUIDProduct配对到我的地图?

man*_*uti 5

这里不需要使用map,直接使用即可forEach。该map方法旨在创建另一个流,其元素是从原始流“映射”的。forEach只是在每个元素上应用一个消费者,在这种情况下,消费者将元素放入哈希映射中。

productList.stream().forEach(product -> 
    productMap.put(product.getUuid(), product)
);
Run Code Online (Sandbox Code Playgroud)

您还可以使用地图收集器来简化代码:

Map<UUID, Product> productMap = productList.stream()
                                           .collect(Collectors.toMap(Product::getUuid, Function.identity()));
Run Code Online (Sandbox Code Playgroud)

map至于原始代码 with无法编译的原因,是因为该map方法需要 aFunction根据定义接受一个值并返回一些内容。由于您使用的是大括号,因此您应该添加一条return语句。或者,您可以删除括号,但请记住我上面提到的内容,并且返回值在这种情况下没有意义,因为它没有被使用:

productList.stream().map(product -> 
    productMap.put(product.getUuid(), product);
);
Run Code Online (Sandbox Code Playgroud)

  • @Henry,当您想使用至少一项其他功能时,您可以使用 Stream。事实上,`forEach`应该是最少使用的Stream操作。而对于“Collection”,它是唯一与“Stream”操作交叉的操作。 (3认同)