Map<String, UserVO> userVOMap = userVOS.stream().collect(Collectors.toMap(UserVO::getId, item -> item, (k1, k2) -> k1)); for (QuerySaleOrderListVo vo : page.getRecords()) { UserVO AuditUser = userVOMap.get(vo.getAuditUser()); UserVO OrderUser = userVOMap.get(vo.getOrderUser()); if(AuditUser!=null){ vo.setAuditUser(AuditUser.getUserName()); } if(OrderUser!=null){ vo.setOrderUser(OrderUser.getUserName()); } } }
时间: 2024-02-10 09:21:03 浏览: 57
这段代码使用了 Java 8 中的 Stream API,将用户列表转换成了 Map,以用户 ID 作为 Map 的 key,用户对象作为 Map 的 value。然后遍历销售订单列表,从 Map 中获取对应的用户对象,并将用户名赋值给销售订单对象。
相对于之前的实现方式,这种实现方式代码更加简洁,可读性更好,同时也提高了性能,时间复杂度为 O(n),与之前的实现方式相同。
需要注意的是,在使用 Stream API 的 toMap() 方法时,如果用户列表中存在重复的用户 ID,需要使用 mergeFunction 参数来指定如何处理重复的 key,否则会抛出 IllegalStateException 异常。在这段代码中,使用了 (k1, k2) -> k1 表示当出现重复的 key 时,保留原始的 value。
相关问题
@DataScope(orgAlias = "o", userAlias = "u") @Override public PageData<UserVO> queryUserPageList(UserQueryDTO queryDTO) { IPage<UserDO> pageParam = PageUtils.getPage(queryDTO); List<UserVO> userVOList = BeanUtils.copyList(userMapper.selectUserList(pageParam, queryDTO), UserVO.class); userVOList.forEach(vo->{ vo.setPostList(postUserService.queryByUserCode(vo.getUserCode()).stream().map(PostUserDO::getPostCode) .collect(Collectors.toList())); });什么意思
这是一个 Java 方法,用于查询用户列表并返回分页数据。该方法使用了注解 `@DataScope(orgAlias = "o", userAlias = "u")`,该注解是用于数据权限控制的,表示查询数据时需要根据用户所在的组织机构进行数据过滤。具体来说,`orgAlias` 表示组织机构的别名,`userAlias` 表示用户的别名,这两个别名在 SQL 语句中会用到。
该方法首先根据传入的 `UserQueryDTO` 对象构建了一个 `IPage<UserDO>` 对象,然后调用 `userMapper.selectUserList()` 方法查询用户列表,并将结果转换为 `List<UserVO>` 对象。接着,对于每个 `UserVO` 对象,又调用了 `postUserService.queryByUserCode()` 方法查询其关联的岗位列表,并将结果设置到 `UserVO` 对象的 `postList` 属性中。最后,将 `List<UserVO>` 对象封装成 `PageData<UserVO>` 对象并返回。
createUserVoList.stream().collect(Collectors.toMap(UserVO::getId, userVO -> userVO));
这段代码是使用 Java 8 中的 Stream API 对 List 中的元素进行处理,并将处理结果转换为一个 Map 对象。
具体来说,`createUserVoList` 是一个 List<UserVO> 类型的对象,表示一组用户信息。`UserVO` 是一个自定义的类,包含了用户的各种属性,比如 id、name、age 等等。
该代码使用了 Stream 的 `collect` 方法,将 List 中的每个 UserVO 对象都转换为一个 Map.Entry 对象,其中 key 是 UserVO 对象的 id 属性,value 是 UserVO 对象本身。具体实现是通过 `Collectors.toMap` 静态方法实现的,其中 `UserVO::getId` 表示使用 UserVO 对象的 id 属性作为 Map 的 key,`userVO -> userVO` 则表示使用 UserVO 对象本身作为 Map 的 value。
最终的结果是一个 Map<Integer, UserVO> 对象,其中 Integer 类型的 key 表示 UserVO 对象的 id 属性,UserVO 类型的 value 表示对应的用户信息。这样可以方便快速地根据用户 id 查找对应的用户信息。
阅读全文