我有以下列表和地图:
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没用。那么,我应该如何添加UUID和Product配对到我的地图?
这里不需要使用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)