使用 Optional 优化代码 7 October 2023 / 1 min read java 使用 Optional 优化代码 Optional 优化之前 // 查询用户角色关联表SysUserRoleRel userRoleRel = userRoleRelMapper.selectOne(new LambdaQueryWrapper<SysUserRoleRel>() .eq(SysUserRoleRel::getUserId, userInfo.getId()));// 获取用户角色名称if (Objects.nonNull(userRoleRel)){ // 查询角色信息 SysRoleInfo roleInfo = roleInfoMapper.selectById(userRoleRel.getRoleId()); if (Objects.nonNull(roleInfo)) { userResp.setRoleName(roleInfo.getRoleName()); userResp.setRoleId(roleInfo.getId()); }} Optional 优化之后 :star_struck: // 查询用户角色关联表SysUserRoleRel userRoleRel = userRoleRelMapper.selectOne(new LambdaQueryWrapper<SysUserRoleRel>() .eq(SysUserRoleRel::getUserId, userInfo.getId()));// 获取用户角色名称Optional.ofNullable(userRoleRel) .map(SysUserRoleRel::getRoleId) .map(roleId -> roleInfoMapper.selectById(roleId)) .ifPresent(sysRoleInfo -> { userResp.setRoleName(sysRoleInfo.getRoleName()); userResp.setRoleId(sysRoleInfo.getId()); }); [!NOTE] Optional#map 从 SysUserRoleRel::getRoleId -> roleInfoMapper.selectById(roleId) 最后获取到了sysRoleInfo,中间如果有空值就不会执行后面的方法。