Java 8 stream 流代码优化

问题遇到的现象和发生背景

重复代码怎么简化

问题相关代码,请勿粘贴截图
 List<Map<String, String>> data = mapper.queryBuyAndSaleDeclarePower(year, dates[0], dates[1], type, null);
        Map<String, Object> map = new HashMap(8);

        map.put("data", data);

        map.put("saleMax", (data == null || data.isEmpty()) ? "" : data.stream()
                .map(x -> x.get("SALEPOWER"))
                .filter(x->x!=null&& StringUtils.isNotBlank(x))
                .map(x->new BigDecimal(x))
                .max(BigDecimal::compareTo)
                .map(x->x.toString())
                .orElse("")
        );
        map.put("saleMin", (data == null || data.isEmpty()) ? "" : data.stream().map(x -> x.get("SALEPOWER")).filter(x->x!=null&& StringUtils.isNotBlank(x)).map(x->new BigDecimal(x)).min(BigDecimal::compareTo).map(x->x.toString()).orElse(""));
        map.put("saleSum", (data == null || data.isEmpty()) ? "" : data.stream().map(x -> x.get("SALEPOWER")).filter(x->x!=null&& StringUtils.isNotBlank(x)).map(x->new BigDecimal(x)).reduce(BigDecimal.ZERO, BigDecimal::add));

        map.put("buyMax", (data == null || data.isEmpty()) ? "" : data.stream().map(x -> x.get("BUYPOWER")).filter(x->x!=null&& StringUtils.isNotBlank(x)).map(x->new BigDecimal(x)).max(BigDecimal::compareTo).map(x->x.toString()).orElse(""));
        map.put("buyMin", (data == null || data.isEmpty()) ? "" : data.stream().map(x -> x.get("BUYPOWER")).filter(x->x!=null&& StringUtils.isNotBlank(x)).map(x->new BigDecimal(x)).min(BigDecimal::compareTo).map(x->x.toString()).orElse(""));
        map.put("buySum", (data == null || data.isEmpty()) ? "" : data.stream().map(x -> x.get("BUYPOWER")).filter(x->x!=null&& StringUtils.isNotBlank(x)).map(x->new BigDecimal(x)).reduce(BigDecimal.ZERO, BigDecimal::add));


        return map;
运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果

简化代码

这一块相同可以建一个中间变量算出来存储起来,这样就简化很多了。

img