阶梯费用计算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+"元");
    }
}
相关推荐
静若繁花_jingjing1 分钟前
DDD领域驱动设计实践_保险
java·开发语言
serendipity_hky4 分钟前
【微服务 - easy视频 | day04】Seata解决分布式事务
java·spring boot·分布式·spring cloud·微服务·架构
陈辛chenxin7 分钟前
软件测试大赛Web测试赛道工程化ai提示词大全
前端·可用性测试·测试覆盖率
沿着路走到底8 分钟前
python 判断与循环
java·前端·python
Code知行合壹11 分钟前
AJAX和Promise
前端·ajax
大菠萝学姐21 分钟前
基于springboot的旅游攻略网站设计与实现
前端·javascript·vue.js·spring boot·后端·spring·旅游
心随雨下33 分钟前
TypeScript中extends与implements的区别
前端·javascript·typescript
摇滚侠37 分钟前
Vue 项目实战《尚医通》,底部组件拆分与静态搭建,笔记05
前端·vue.js·笔记·vue
双向3338 分钟前
CANN训练营实战指南:从算子分析到核函数定义的完整开发流程
前端
caleb_52039 分钟前
vue cli的介绍
前端·javascript·vue.js