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

有用记得采纳

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

只有过滤和转成BigDecimal是重复的,把这一步拿出去单独做

img

我记得Collections这个工具类有max/min这两个函数可以去最大最小值。可以省去很多代码。