private Map<String, String> checkOwnerNames(List<String> ownerNames) { LambdaQueryWrapper<PmBuildingDetailExcelVo> queryWrapper=Wrappers.lambdaQuery(); queryWrapper.select(PmBuildingDetailExcelVo::getOwnerName).in(PmBuildingDetailExcelVo::getOwnerName,ownerNames); List<PmRoomInfoInfo> roomInfoInfoList=this.list(queryWrapper); if(LinkRuleHelper.isNotNull(roomInfoInfoList)){ return roomInfoInfoList.stream().collect(Collectors.toMap(e->e.getRoomId()+"_"+e.getBuildingName(), PmBuildingDetailExcelVo::getOwnerName,(k1,k2)->k2)); } else { return new HashMap<>(); } }我这个写的有问题吗
时间: 2024-04-11 07:27:32 浏览: 106
根据你提供的代码,有几个问题需要注意:
1. `queryWrapper.select(PmBuildingDetailExcelVo::getOwnerName)` 选择的是 `PmBuildingDetailExcelVo` 的属性 `ownerName`,而不是 `PmRoomInfoInfo` 的属性。请确保选择的属性与查询的实体类一致。
2. 在 `collect()` 方法中,`PmBuildingDetailExcelVo::getOwnerName` 应该改为 `PmRoomInfoInfo::getOwnerName`,以保持一致性。
3. 在 `collect()` 方法中,`(k1, k2) -> k2` 的作用是当遇到键冲突时,后面的值将会覆盖前面的值。在这里,由于你使用了 `PmBuildingDetailExcelVo::getOwnerName` 作为值提取函数,而不是 `PmRoomInfoInfo::getOwnerName`,这可能导致值被错误地覆盖。为了避免这个问题,可以将 `(k1, k2) -> k2` 改为 `(k1, k2) -> k1`,或者直接省略这个参数,使用默认的合并函数。
修正后的代码如下所示:
```java
private Map<String, String> checkOwnerNames(List<String> ownerNames) {
LambdaQueryWrapper<PmRoomInfoInfo> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.select(PmRoomInfoInfo::getOwnerName).in(PmRoomInfoInfo::getOwnerName, ownerNames);
List<PmRoomInfoInfo> roomInfoInfoList = this.list(queryWrapper);
if (LinkRuleHelper.isNotNull(roomInfoInfoList)) {
return roomInfoInfoList.stream()
.collect(Collectors.toMap(e -> e.getRoomId() + "_" + e.getBuildingName(),
PmRoomInfoInfo::getOwnerName));
} else {
return new HashMap<>();
}
}
```
请确保在使用代码前导入相关的类,并根据实际情况进行适当的调整。
阅读全文