优化这段代码 Map<String, List<PositionInfo>> resultMap ; List<String> allRows = this.getHBaseRows(); if (CollectionUtils.isEmpty(allRows)) { return success(new HashMap<>(1)); } // 数据转换 List<PositionInfo> allInfos = allRows.stream() .map(ar -> JSONObject.parseObject(ar, PositionInfo.class)) .filter(ar -> ar.getTimestamp() > DateUtils.addHours(new Date(), -1).getTime()) .collect(Collectors.toList()); // 获取每个用户最近一次的记录 List<PositionInfo> result = new ArrayList<>(allInfos.stream() .collect(Collectors.toMap(PositionInfo::getUserId, Function.identity(), BinaryOperator.maxBy(Comparator.comparing(PositionInfo::getTimestamp)))) .values()); switch (homeQueryCondition.getCityIndex()) { case 0: resultMap = result.stream().collect(Collectors.groupingBy(PositionInfo::getProvince)); break; case 1: resultMap = result.stream().filter(ar -> homeQueryCondition.getProvince().equals(ar.getProvince())) .collect(Collectors.groupingBy(PositionInfo::getCity)); break; case 2: resultMap = result.stream().filter(ar -> homeQueryCondition.getCity().equals(ar.getCity())) .collect(Collectors.groupingBy(PositionInfo::getCounty)); break; default: resultMap = new HashMap<>(1); }
时间: 2024-02-09 18:13:15 浏览: 74
这段代码的主要功能是在 HBase 数据库中查询用户位置信息,并对查询结果进行转换和分组,最终返回一个 Map,其中键是用户的位置信息,值是对应位置的用户信息列表。
以下是一些优化建议:
1. 避免使用过多的中间变量,可以直接将查询结果转换成 Map。
2. 简化代码逻辑,可以使用 if-else 语句替换 switch 语句。
3. 对于大数据集,使用并行流处理可以提高处理效率。
下面是优化后的代码示例:
```
List<String> allRows = this.getHBaseRows();
if (CollectionUtils.isEmpty(allRows)) {
return success(new HashMap<>(1));
}
// 将查询结果转换成 Map,键为用户 ID,值为用户位置信息列表
Map<String, List<PositionInfo>> allInfosMap = allRows.parallelStream()
.map(ar -> JSONObject.parseObject(ar, PositionInfo.class))
.filter(ar -> ar.getTimestamp() > DateUtils.addHours(new Date(), -1).getTime())
.collect(Collectors.groupingBy(PositionInfo::getUserId));
// 获取每个用户最近一次的记录,转换成列表
List<PositionInfo> result = allInfosMap.values().stream()
.map(positionInfos -> positionInfos.stream()
.max(Comparator.comparing(PositionInfo::getTimestamp))
.orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());
// 根据查询条件进行分组
if (homeQueryCondition.getCityIndex() == 0) {
resultMap = result.stream()
.collect(Collectors.groupingBy(PositionInfo::getProvince));
} else if (homeQueryCondition.getCityIndex() == 1) {
resultMap = result.stream()
.filter(ar -> homeQueryCondition.getProvince().equals(ar.getProvince()))
.collect(Collectors.groupingBy(PositionInfo::getCity));
} else if (homeQueryCondition.getCityIndex() == 2) {
resultMap = result.stream()
.filter(ar -> homeQueryCondition.getCity().equals(ar.getCity()))
.collect(Collectors.groupingBy(PositionInfo::getCounty));
} else {
resultMap = new HashMap<>(1);
}
```
阅读全文