Java 根据分数范围获取等级

这篇博客介绍了如何利用Google Guava库中的TreeRangeMap数据结构,高效地进行分数段与等级匹配。通过预先加载分数范围与等级映射,避免了对数据库的多次查询,提升了数据处理效率。示例代码展示了如何根据分数列表动态设置记录的等级信息。
摘要由CSDN通过智能技术生成

背景:虽然DB中分别存储了begin 和 end 的分数范围,但是每条数据都查一遍库的话,明显不是最好的方法,所以一次性将需要的数据先查询出来,然后再匹配到相应的等级。以下是其中一种解决方案。

使用到google guava。

<dependency>
     <groupId>com.google.guava</groupId>
     <artifactId>guava</artifactId>
     <version>30.1.1-jre</version>
<!--            &lt;!&ndash; or, for Android: &ndash;&gt;-->
<!--            <version>30.1.1-android</version>-->
 </dependency>

使用范例:
如下形式
91-100分,[90,100],划分等级A;
81-90分,[80,90),划分等级B;
71-80分,[70,80),划分等级C;
61-70分,[60,70),划分等级E;
0-60分,[0,60),划分等级F;

使用TreeRangeMap

...
List<Integer> scoreList = records.stream().map(Score::getScore).distinct().collect(Collectors.toList());
List<Grade> gradeList = gradeService.listGradeByScore(scoreList);
RangeMap<Integer, String> scoreRangeMap = TreeRangeMap.create();
gradeList.forEach(grade -> scoreRangeMap.put(Range.openClosed(grade.getBeginScore(), grade.getEndScore()), grade.getName()));
records.forEach(record -> record.setGrade(scoreRangeMap.get(record.getScore())));
...

其中Range有很多种集合范围方式,比如[…],[…),(…] 等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值