热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Java8Streams,如何在HashMap中查找给定元素的最大值

如何解决《使用Java8Streams,如何在HashMap中查找给定元素的最大值》经验,为你挑选了1个好方法。



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));


推荐阅读
author-avatar
tengpou_260475
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有