String.format("%s"+save.getId()+"%s", ",")有什么不对
时间: 2023-07-21 17:09:05 浏览: 72
在你提供的代码中,使用了一个不正确的方式来连接字符串和插入变量。正确的写法应该是使用逗号分隔的多个参数来传递给 `string.format()` 函数。
以下是正确的写法:
```lua
local save = {id = 123}
local str = string.format("%s%s%s", ",", save.id, ",")
print(str) -- 输出 ",123,"
```
在这个例子中,`"%s%s%s"` 是格式字符串,`","` 是第一个要插入的值,`save.id` 是第二个要插入的值,再次插入 `","` 是第三个要插入的值。最终结果是 `",123,"`。
如果你希望在字符串中插入多个变量,只需在格式字符串中使用多个占位符,并提供相应数量的参数即可。
希望这样解答了你的问题!如果还有其他问题,请随时提问。
相关问题
优化这段java代码 //通过域账号名称 调用userSdk获取 对应ID List<String> sendUserNameList = form.getOperationScoreDTOList() .stream().map(OperationScoreDTO::getSenderName).distinct().collect(Collectors.toList()); List<String> receiverUserNameList = form.getOperationScoreDTOList() .stream().map(OperationScoreDTO::getReceiverName).distinct().collect(Collectors.toList()); List<FindOneByUsernameVo> sendUserList = userServiceSdk.findByUsernames(sendUserNameList); List<FindOneByUsernameVo> receiverUserList = userServiceSdk.findByUsernames(receiverUserNameList); Map<String, Integer> senderMap = sendUserList .stream() .collect(Collectors.toMap(FindOneByUsernameVo::getUsername, FindOneByUsernameVo::getTeclibUserId)); Map<String, Integer> receiverMap = receiverUserList .stream() .collect(Collectors.toMap(FindOneByUsernameVo::getUsername, FindOneByUsernameVo::getTeclibUserId)); for (OperationScoreDTO operationScoreDTO : form.getOperationScoreDTOList()) { Integer senderId = senderMap.get(operationScoreDTO.getSenderName()); if (senderId == null) { throw new BizException("获取发送者失败"); } Integer receiverId = receiverMap.get(operationScoreDTO.getSenderName()); if (receiverId == null) { throw new BizException("获取接收者失败"); } Short score = operationScoreDTO.getScore(); String remark = operationScoreDTO.getRemark(); OperationScoreEntity os = new OperationScoreEntity(); os.setSendId(senderId); os.setReceiverId(receiverId); os.setEvent(score.toString()); os.setRemark(remark); os.setSendTime(LocalDate.now()); operationScoreRepository.save(os); String event = ScoreEventConstant.BONUS_SCORE; String module = ScoreModuleConstant.BONUS_SCORE; String payload = String.format("osId:%d;receiver:%d;remark:%s;score:%s", os.getId(), receiverId, remark, score); UserScoreEntity userScore = new UserScoreEntity(); userScore.setUserId(receiverId); userScore.setModule(module); userScore.setEvent(event); userScore.setPayload(payload); userScore.setOperationTime(operationScoreDTO.getOperationTime()); userScore.setScore(score); Integer totalScore = this.findTotalScoreByUserId(receiverId); userScore.setTotal(Math.max(totalScore + score, 0)); userScoreRepository.save(userScore); } return Boolean.TRUE;
在这段代码中,你可以考虑以下优化措施:
1. 将重复的代码提取为方法:将获取用户名列表和调用 `userServiceSdk.findByUsernames` 的逻辑提取为一个方法,这样可以减少重复代码。
2. 使用 `forEach` 替代 `for` 循环:使用流的 `forEach` 方法可以简化循环的书写,更加简洁和直观。
3. 使用批量插入:使用批量插入操作可以减少数据库交互次数,提高性能。
下面是优化后的代码示例:
```java
List<String> sendUserNameList = form.getOperationScoreDTOList()
.stream().map(OperationScoreDTO::getSenderName).distinct().collect(Collectors.toList());
List<String> receiverUserNameList = form.getOperationScoreDTOList()
.stream().map(OperationScoreDTO::getReceiverName).distinct().collect(Collectors.toList());
Map<String, Integer> senderMap = getUserIdsByUsernames(sendUserNameList);
Map<String, Integer> receiverMap = getUserIdsByUsernames(receiverUserNameList);
form.getOperationScoreDTOList().forEach(operationScoreDTO -> {
Integer senderId = senderMap.get(operationScoreDTO.getSenderName());
if (senderId == null) {
throw new BizException("获取发送者失败");
}
Integer receiverId = receiverMap.get(operationScoreDTO.getSenderName());
if (receiverId == null) {
throw new BizException("获取接收者失败");
}
Short score = operationScoreDTO.getScore();
String remark = operationScoreDTO.getRemark();
OperationScoreEntity os = new OperationScoreEntity();
os.setSendId(senderId);
os.setReceiverId(receiverId);
os.setEvent(score.toString());
os.setRemark(remark);
os.setSendTime(LocalDate.now());
operationScoreRepository.save(os);
String event = ScoreEventConstant.BONUS_SCORE;
String module = ScoreModuleConstant.BONUS_SCORE;
String payload = String.format("osId:%d;receiver:%d;remark:%s;score:%s",
os.getId(), receiverId, remark, score);
UserScoreEntity userScore = new UserScoreEntity();
userScore.setUserId(receiverId);
userScore.setModule(module);
userScore.setEvent(event);
userScore.setPayload(payload);
userScore.setOperationTime(operationScoreDTO.getOperationTime());
userScore.setScore(score);
Integer totalScore = this.findTotalScoreByUserId(receiverId);
userScore.setTotal(Math.max(totalScore + score, 0));
userScoreRepository.save(userScore);
});
return Boolean.TRUE;
private Map<String, Integer> getUserIdsByUsernames(List<String> usernames) {
List<FindOneByUsernameVo> userList = userServiceSdk.findByUsernames(usernames);
return userList.stream()
.collect(Collectors.toMap(FindOneByUsernameVo::getUsername, FindOneByUsernameVo::getTeclibUserId));
}
```
通过上述优化,你可以减少代码重复,提高代码的可读性和维护性,并且减少数据库交互次数,提高性能。
public Result<?> save(@RequestBody Order order) { // order.setFlow(order.getFlow()); order.setUserId(getUser().getId()); order.setOrderNo(DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomNumbers(6)); order.setCreateTime(DateUtil.now()); String cartsStr = order.getCarts(); List<Cart> carts = JSONUtil.toBean(cartsStr, new TypeReference<List<Cart>>() { }, true); orderService.save(order); for (Cart cart : carts) { Integer count = cart.getCount(); Long goodsId = cart.getGoodsId(); // 扣库存 Goods goods = goodsService.getById(goodsId); if(goods.getStore() - cart.getCount() < 0) { throw new CustomException("-1", "库存不足"); } goods.setStore(goods.getStore() - cart.getCount()); goods.setSales(goods.getSales() + cart.getCount()); goodsService.updateById(goods); OrderGoods orderGoods = new OrderGoods(); orderGoods.setOrderId(order.getId()); orderGoods.setGoodsId(goodsId); orderGoods.setCount(count); orderGoodsService.save(orderGoods); } if (order.getType() == 1) { // 1表示购物车,0表示直接购买 // 提交订单时清空个人的购物车商品 cartService.remove(Wrappers.<Cart>lambdaUpdate().eq(Cart::getUserId, getUser().getId())); } return Result.success(order); // return Result.success(orderService.save(order)); }
这段代码看起来像是一个在后端处理用户订单的方法,其中对应着的请求体就是包含着商品信息的订单对象。这个方法接收这个订单对象之后,处理了其中一些信息,比如设置了用户id、订单编号、创建时间等等。然后这个方法又把这个订单对象保存到数据库中,之后又遍历了一下其中的商品信息,通过商品id来寻找对应的商品,然后扣除相应的库存和增加相应的销量。最后还会把这些订单中的商品信息保存到数据库中,之后,如果这个订单是属于购物车类型的话,就会清空当前用户的购物车里面的商品。最后这个方法会通过返回一个包含订单信息的Result对象来告诉调用者这个方法是否执行成功。
阅读全文
相关推荐













