使用Function Interface简化if-else代码示例

使用表驱动的方法,利用Function Interface优化If-else的示例代码:
 1 package com.siasun.java8.function.function;
 2 
 3 import java.math.BigDecimal;
 4 import java.util.List;
 5 import java.util.function.Function;
 6 
 7 /**
 8  * 税金计算
 9  * Function Interface 简化 if-else判断示例
10  * @author : wanggang
11  * @create 2025/7/15 8:21
12  */
13 public class TaxCalculateDemo {
14 
15   //定义计算表达式
16   public static List<RangeHandler> calculateTaxHandlers = List.of(
17     new RangeHandler(
18       null,
19       new BigDecimal(36000),
20       d -> d.multiply(new BigDecimal("0.1"))
21     ),
22     new RangeHandler(
23       new BigDecimal(36000),
24       new BigDecimal(144000),
25       d -> d.multiply(new BigDecimal("0.2"))
26     ),
27     new RangeHandler(
28       new BigDecimal(14000),
29       null,
30       d -> d.multiply(new BigDecimal("0.3"))
31     )
32   );
33 
34   public static void main(String[] args) {
35     BigDecimal yearIncome = new BigDecimal(36001);
36 
37     BigDecimal tax = calculateTaxHandlers
38       .stream()
39       .filter(d -> d.matches(yearIncome))
40       .findFirst()
41       .map(handler -> handler.execute(yearIncome))
42       .orElse(new BigDecimal(0));
43 
44     System.out.println("个人所得税为:" + tax);
45   }
46 
47   public static class RangeHandler {
48 
49     private final BigDecimal min;
50     private final BigDecimal max;
51     private final Function<BigDecimal, BigDecimal> action;
52 
53     public RangeHandler(
54       BigDecimal min,
55       BigDecimal max,
56       Function<BigDecimal, BigDecimal> action
57     ) {
58       this.min = min;
59       this.max = max;
60       this.action = action;
61     }
62 
63     public boolean matches(BigDecimal value) {
64       boolean flag = true;
65       if (min != null) {
66         flag = value.compareTo(min) >= 0;
67       }
68       if (max != null) {
69         flag = flag && value.compareTo(max) < 0;
70       }
71       return flag;
72     }
73 
74     public BigDecimal execute(BigDecimal value) {
75       return action.apply(value);
76     }
77   }
78 }

 

使用责任链模式简化if-else代码示例

posted @ 2025-09-25 08:52  刚泡  阅读(7)  评论(0)    收藏  举报