当前位置: 首页 > article >正文

阶梯费用计算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
  }
]

阶梯费用计算代码


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+"元");
    }
}


http://www.kler.cn/a/472912.html

相关文章:

  • 【微服务】1、引入;注册中心;OpenFeign
  • MFC读写文件实例
  • Oracle 中的各种名称(*_name)参数的含义与作用
  • C语言的语法
  • ChatGPT网络错误如何解决
  • MongoTemplate 性能优化指南
  • 超详细的 JDK环境配置步骤图文教程
  • 《C++11》右值引用深度解析:性能优化的秘密武器
  • linux安全更新zookeeper docker
  • Python创建GitHub标签的Django管理命令
  • unity TextMeshPro使用window字体的方式
  • LVGL源码(4):LVGL关于EVENT事件的响应逻辑
  • CAD批量打印可检索的PDF文件
  • Redis 性能优化:利用 MGET 和 Pipeline 提升效率
  • 软件测试的未来:如何跨越自动化到自主测试的鸿沟
  • 【深度学习系统】Lecture 4 - Automatic Differentiation
  • 左神算法基础巩固--4
  • ESP32 IDF VScode出现头文件“无法打开 源 文件 ”,并有红色下划线警告
  • Docker 容器运行后自动退出的解决方案
  • MySQL 分库分表实战(一)
  • 无网络时自动切换备用网络环境
  • C++二十三种设计模式之迭代器模式
  • Python爬虫基础——XPath表达式
  • ffmpeg之h264格式转yuv
  • WEBRTC前端播放 播放器组件封装
  • 【Linux】深入理解文件系统(超详细)