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

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条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

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

      悬赏问题

      • ¥15 和您碰到了同一个问题
      • ¥15 如何在微信支付V3PHP版请求中添加header?
      • ¥15 在数字信号处理中用MATLAB显示波形。
      • ¥15 keil MDK软件进行仿真调试的局限
      • ¥15 关于gateway产生临时文件夹的问题
      • ¥15 Java Broken Pipe以及OOM
      • ¥20 请问有没有RTL8211FS的参考原理图
      • ¥50 esp32的platfromio工程添加文件就会编译失败
      • ¥15 linux下运行VASP报错
      • ¥15 python里面查找赋值,如何可以在剩余未空值的行里面进行进一步的筛选呢?