作者:tengpou_260475 | 来源:互联网 | 2022-12-23 21:39
1> Ousmane D...:
第一个问题是,既然你想要找到最大Product
的价格,那么最好items.values()
用作流的源,然后你将有一个Stream
而不是一个Stream>
.
其次,reduce
操作没有正确的类型.因此,要使当前代码正常工作,您需要执行以下操作:
Optional> result =
items.entrySet()
.stream()
.reduce((Map.Entry a, Map.Entry b) ->
a.getValue().getPrice()
第三,该reduce
操作的重载返回一个,Optional
因此结果集的接收器类型必须Optional
如上所示.
在上面,我们将null
在Optional中没有值的情况下返回.
更好的解决方案是使方法返回一个类型Optional
.这将向您或您的同事以及您的方法的所有未来用户提供文档,其中可能会给出结果为空的值.
这是返回null
文档的更好选择,并确保此方法的用户安全地解包返回值.
无效在某些时候可能是危险的,并且在适当的情况下利用Optional可以带您走很长的路.
考虑到所有这些,您的代码将成为:
// example without returning an `Optional`
public Product getMostExpensiveProduct(HashMap items) {
Optional maxPriceProduct =
items.values()
.stream()
.reduce((Product a, Product b) ->
a.getPrice()
//示例返回一个 Optional
public Optional getMostExpensiveProduct(HashMap items) {
Optional maxPriceProduct =
items.values()
.stream()
.reduce((Product a, Product b) ->
a.getPrice()
无论如何,该max
方法更适合于此任务而不是reduce
,因此可以将其全部改进为:
Optional maxPriceProduct =
items.values()
.stream()
.max(Comparator.comparingInt(Product::getPrice));