使用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 }

浙公网安备 33010602011771号