阶梯费用计算demo

阶梯配置

复制代码
[
  {
    "grade": 1,
    "max": 10,
    "min": 0,
    "price":0.5
  },
  {
    "grade": 2,
    "max": 50,
    "min": 10,
    "price":0.8
  },
  {
    "grade": 3,
    "max": 100,
    "min": 50,
    "price":1
  },
  {
    "grade": 4,
    "max": 200,
    "min": 100,
    "price":1.5
  }
]

阶梯费用计算代码

java 复制代码
public class DFTest {
    /**
     *   价格的上限值
     */
    private static double topPrice=5;

    /**
     * 电费阶梯计价
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
         /*计算最终的总金额*/
        Double amount = 0.0;
        /* 费用的点数*/
        double  dushu = 300;
        /* 从配置文件中读取阶梯配置  并按照顺序进行排序*/
        String string = FileUtils.readFileToString(new File("D:\\dev\\ideastore\\big_projects\\flink-cdc-demo\\data.json"),"utf-8");
        List<GradeConfig> list = JSON.parseArray(string, GradeConfig.class);
        List<GradeConfig> gradeConfigs = list.stream().sorted((o1, o2) -> o1.getGrade() - o2.getGrade()).collect(Collectors.toList());

        /* 计算 费用总额*/
        for (int i = 0; i <= gradeConfigs.size() - 1; i++) {
            GradeConfig gradeConfig = gradeConfigs.get(i);
            if ( dushu>gradeConfig.getMin() && dushu<=gradeConfig.getMax()){
//                在这个区间
//                  直接 计算 之前的 所有分区的金额
                Double aDouble = gradeConfigs.stream().filter(x -> x.getGrade() < gradeConfig.getGrade()).map(x -> {
                    double v = (x.getMax() - x.getMin()) * x.getPrice();
                    return v;
                }).reduce((x, y) -> x + y).get();
                amount += aDouble;
                amount += (dushu - gradeConfig.getMin()) * gradeConfig.getPrice();
                break;
            }else if (i==gradeConfigs.size()-1){
//                找到最后一个了还不是则需计算全部区间的金额
                Double aDouble = gradeConfigs.stream().map(x -> {
                    double v = (x.getMax() - x.getMin()) * x.getPrice();
                    return v;
                }).reduce((x, y) -> x + y).get();
                amount += aDouble;
                amount += (dushu- gradeConfig.getMax())*topPrice;
            }else{
//                 还没有找完  继续找
            }
        }
       System.out.println("总金额是:"+amount+"元");
    }
}
相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商