如何使用Map来取代if else的范围判断

需求:

当我们想判断一个数字是否在某个范围的时候,往往是if -else

比如:

    public static int getTemperatureLevel(double valuationScore) {
        if (valuationScore >= 0 && valuationScore < 20) {
            return 4; // 极低温
        } else if (valuationScore >= 20 && valuationScore < 30) {
            return 3; // 低温
        } else if (valuationScore >= 30 && valuationScore < 70) {
            return 2; // 常温
        } else if (valuationScore >= 70 && valuationScore <= 100) {
            return 1; // 高温
        } else {
            return 5; // 极高温
        }
    }

但是大量的if -else 显得不美观,而且不够优雅

在google的Guava里提供了RangeMap!

RangeMap简介

引入Guava依赖:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>29.0-jre</version>
</dependency>

RangeMap 是一种集合类型(collection type),它将不相交、且不为空的 Range(key)映射给一个值(Value)。和 RangeSet不一样,RangeMap 不可以将相邻的区间合并,即使这个区间映射的值是一样的。
简单的讲就是可以把条件范围变成一个key,根据key获取value

写法就变成了:

    // 定义表示温度范围的Map,极低温为1,低温为2,常温为3,高温为4,极高温为5
    private static final RangeMap<Double, Integer> temperatureRangeMap = TreeRangeMap.create();
    static {
        temperatureRangeMap.put(Range.closedOpen(0.0,20.0), 1);
        temperatureRangeMap.put(Range.closed(20.0, 30.0), 2);
        temperatureRangeMap.put(Range.closed(30.0, 70.0), 3);
        temperatureRangeMap.put(Range.closed(70.0, 80.0), 4);
        temperatureRangeMap.put(Range.openClosed(80.0,100.0), 5);
    }


        Integer temp = temperatureRangeMap.get(15.0);
        System.out.println("15.0这个温度的类型是"+temp);

大功告成!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值