Map<String,Integer> userCountMap = new HashMap<>(); for(String userId : hasSummaryUsers){ Integer count = userCountMap.get(userId); userCountMap.put(userId,count == null ? 1 : count+1); } if(!CollectionUtils.isEmpty(assessList)){ for(Assess assess : assessList){ Integer count = userCountMap.get(assess.getUserId()); //缺少一周周报扣5分 if(count == null){ assess.setWeeklyPoints(weekNum*5); }else{ int points = (weekNum-count)*5; if(points < 0){ points = 0; } assess.setWeeklyPoints(points); } } } 如何优化这段代码
时间: 2024-02-10 17:05:34 浏览: 99
HashMap原理分析及性能优化
可以考虑使用Java 8的Stream API来优化这段代码,将第一个for循环改为:
```
Map<String, Integer> userCountMap = hasSummaryUsers.stream()
.collect(Collectors.toMap(Function.identity(), e -> 1, Integer::sum));
```
这段代码使用Stream的collect()方法,将hasSummaryUsers集合中的每个元素转化为Map的键,并把值设为1。如果当前键已存在,则将值加1。这样可以避免了手动遍历集合,使代码更加简洁和易于理解。
对于第二个for循环,可以使用Java 8的Stream API和Optional类来简化代码:
```
assessList.forEach(assess -> {
Integer count = Optional.ofNullable(userCountMap.get(assess.getUserId())).orElse(0);
int points = Math.max(0, (weekNum - count) * 5);
assess.setWeeklyPoints(points);
});
```
这段代码使用Stream的forEach()方法,对assessList集合中的每个元素进行处理。使用Optional.ofNullable()方法和orElse()方法来避免了使用null判断。使用Math.max()方法来取得最大值,避免使用if语句。
这样,整体代码更加简洁和易于理解。
阅读全文