java - 使用流从两个数组创建一个数组
问题描述
我有如下代码:
List<UserDTO> result = new ArrayList<>();
UserDTO userDTO;
for (User user : users) {
for (Individual individual : individuals) {
if (individual.getKey().equals(user.getIndividualId())) {
userDTO = new UserDTO();
userDTO.setUserId(user.getUserId());
userDTO.setFirstName(individual.getFirstName());
userDTO.setLastName(individual.getLastName());
result.add(utilisateurDTO);
break;
}
}
}
如何使用 Java 8 流编写此代码?
解决方案
未经测试,但您可以尝试类似的方法:
List<UserDTO> userDtos =
users.stream()
.map(u -> individuals.stream()
.filter(indiv -> indiv.getKey()
.equals(u.getIndividualId()))
.findFirst()
.map(indiv -> new UserDTO(u.getUserId(), indiv.getFirstName(), indiv.getLastName()))
.orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());
findFirst()
一旦检测到个人和用户之间的匹配,将允许短路内部迭代。
我引入了一个 arg 构造函数UserDTO()
来简化它的初始化。
推荐阅读
- google-cloud-platform - 我们如何使用数据资源获取 GCP 存储桶名称
- sql - .NET CORE:Dapper 映射多对多查询
- java - Gson.fromJSON 返回 0 和 null
- git - 如何在 git update 上触发 ansible playbook?
- apache-spark - 需要将列的值映射到另一列作为火花数据框中的键值对
- graph - Spotfire - 在一个图上选择数据并从前一个选择中取消选择
- spring-boot - 如何从几个 yaml 规范生成 swagger-ui?
- lambda - Hazelcast Jet - 如何在 Jet 管道中使用非静态方法
- consul - 如何克服领事中的问题 500(后端响应错误)?
- vhdl - 当我在文字中指定基数时,为什么除了 (0 和 1) 之外什么都不能使用?