继续优化,usernames分组查询分组追加到List<AuthorLayerTagValue> authorLayerTagValues
时间: 2024-02-24 14:56:29 浏览: 17
可以通过使用Stream的groupingBy()方法实现对AuthorLayerTagValue对象的分组查询。优化后的代码如下:
```
if (CollUtil.isNotEmpty(list)) {
// 获取所有用户名
List<String> usernames = list.stream().map(User::getUsername).collect(Collectors.toList());
// 在数据库中按用户名分组查询需要更新的AuthorLayerTagValue对象,并将其追加到authorLayerTagValues集合中
List<AuthorLayerTagValue> authorLayerTagValues = authorLayerTagValueDao.findByUsernames(usernames)
.stream()
.collect(Collectors.groupingBy(AuthorLayerTagValue::getUsername))
.values()
.stream()
.map(authorLayerTagValueList -> {
AuthorLayerTagValue mergedAuthorLayerTagValue = new AuthorLayerTagValue();
mergedAuthorLayerTagValue.setUsername(authorLayerTagValueList.get(0).getUsername());
mergedAuthorLayerTagValue.setVipRealPrice(BigDecimal.ZERO);
authorLayerTagValueList.forEach(authorLayerTagValue -> mergedAuthorLayerTagValue.setVipRealPrice(mergedAuthorLayerTagValue.getVipRealPrice().add(authorLayerTagValue.getVipRealPrice())));
return mergedAuthorLayerTagValue;
})
.collect(Collectors.toList());
// 对每个AuthorLayerTagValue对象进行更新操作
authorLayerTagValues.parallelStream().forEach(authorLayerTagValue -> {
authorLayerTagValue.setVipRealPrice(authorLayerTagValue.getVipRealPrice().add(BigDecimal.ONE));
authorLayerTagValueDao.upsert(authorLayerTagValue);
});
}
```
优化后的代码先使用Stream的map()方法将list中的User对象映射为需要查询的用户名集合,然后使用authorLayerTagValueDao.findByUsernames()方法在数据库中按用户名分组查询需要更新的AuthorLayerTagValue对象,并将其追加到authorLayerTagValues集合中。接下来,使用Stream的groupingBy()方法对查询结果按用户名进行分组,并使用Stream的map()方法将每个分组合并为一个AuthorLayerTagValue对象。最后使用并行流对每个AuthorLayerTagValue对象进行更新操作。