小小Java人 2022-06-01 10:59 采纳率: 33.3%
浏览 51
已结题

Java8简化代码,获取最大最小值

需求:简化以下代码
简化代码!简化代码!代码简化!
以下代码解决的问题:返回一个result(Map类型)。result需要包含最大最小和总加值。
已知:给出一个List<Map<String, String>> 类型,其中map 一般是包含两个属性。一个是“id”,一个是“value”。
注:map 中可能没有value属性,可能value属性是空字符串。给出的List<Map<String, String>> maps 也需要判空
说明:给出的List<Map<String, String>> maps 的size 为几百到一千不等
实际开发中 需要求多个List<Map<String, String>> 的最大最小值,故想简化代码

问题相关代码,请勿粘贴截图
public class Test {

    public static void main(String[] args) {
        System.out.println(doMethod());
    }

    public static Map<String ,String> doMethod(){
        List<Map<String, String>> maps = generator();
        Map result=new HashMap();
        if(CollectionUtils.isEmpty(maps)){
            result.put("max","");
            result.put("min","");
            result.put("sum","");
            return result;
        }
        BigDecimal max= maps.stream()
                .filter(x -> StringUtils.isNotBlank(x.get("value")))//过滤掉没有value属性的和value属性为空字符串的
                .map(x -> new BigDecimal(x.get("value")))
                .max(BigDecimal::compareTo).get();

        BigDecimal min=maps.stream()
                .filter(x -> StringUtils.isNotBlank(x.get("value")))//过滤掉没有value属性的和value属性为空字符串的
                .map(x -> new BigDecimal(x.get("value")))
                .min(BigDecimal::compareTo).get();
        BigDecimal sum=maps.stream()
                .filter(x -> StringUtils.isNotBlank(x.get("value")))//过滤掉没有value属性的和value属性为空字符串的
                .map(x -> new BigDecimal(x.get("value")))
                .reduce(BigDecimal.ZERO,BigDecimal::add);
        result.put("max",max);
        result.put("min",min);
        result.put("sum",sum);
        return result;
    }

    //生成样本数据
    public static List<Map<String,String>> generator2(){
        return new ArrayList<>();
    }
    public static List<Map<String,String>> generator(){
        //有些map 中没有value的属性,也有可能是空字符串
        Map<String,String> map1=new HashMap();
        map1.put("id","1");
        map1.put("value","1.1");
        Map<String,String> map2=new HashMap();
        map2.put("id","1");
        map2.put("value","1.2");
        Map<String,String> map3=new HashMap();
        map3.put("id","1");
        map3.put("value","");
        Map<String,String> map4=new HashMap();
        map4.put("id","1");

        Map<String,String> map5=new HashMap();
        map5.put("id","1");
        map5.put("value","1.5");

        return Lists.newArrayList(map1,map2,map3,map4,map5);
    }
}

  • 写回答

3条回答 默认 最新

  • 皮蛋不吃粥 2022-06-01 11:44
    关注

    有用记得采纳

        public static Map<String ,String> doMethod(){
            List<Map<String, String>> maps = generator();
            Map result=new HashMap();
            if(CollectionUtil.isEmpty(maps)){
                result.put("max","");
                result.put("min","");
                result.put("sum","");
                return result;
            }
            DoubleSummaryStatistics collect = maps.stream().filter(x -> StrUtil.isNotBlank(x.get("value")))
                    .collect(Collectors.summarizingDouble(e -> new BigDecimal(((Map) e).get("value").toString()).doubleValue()));
            result.put("max",collect.getMax());
            result.put("min",collect.getMin());
            result.put("sum",collect.getSum());
            return result;
        }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 已采纳回答 6月2日
  • 创建了问题 6月1日

悬赏问题

  • ¥15 单片机配网,继电器开关,广播
  • ¥60 Qcustomplot绘制实时动态曲线
  • ¥20 运用matlab画x-y图
  • ¥15 用idea运行项目,运行tomcat报错:断言失败
  • ¥15 Sqlserver查询链接服务器数据问题
  • ¥15 Bibtex4Word 引用中文文献
  • ¥20 用opencv c/c++ 转换成灰度图,然后做一下直方图均衡,输出mp4文件
  • ¥20 matlab中的双层数值积分
  • ¥50 服务器打印水晶报表问题
  • ¥30 gradle环境下javafx项目如何使用druid连接池