gpt4 book ai didi

java - 使用流从两个数组创建一个数组

转载 作者:行者123 更新时间:2023-11-30 06:03:42 26 4
gpt4 key购买 nike

我有一个代码如下:

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 流编写此代码?

最佳答案

将键和值存储到映射中:

Map<T, Individual> individualsMap =
individuals.stream()
.collect(Collectors.toMap(Individual::getKey,
Function.identity(),
(l, r) -> l));

其中 TIndividual::getKey 的任何类型。

Java-8 解决方案:

List<UserDTO> resultSet = 
users.stream()
.map(user -> Optional.ofNullable(individualsMap.get(user.getIndividualId()))
.map(i -> new AbstractMap.SimpleEntry<>(i, user.getUserId())).orElse(null))
.filter(Objects::nonNull)
.map(e -> new UserDTO(e.getValue(), e.getKey().getFirstName(), e.getKey().getLastName()))
.collect(Collectors.toList());

java-9解决方案:

List<UserDTO> resultSet = 
users.stream()
.flatMap(user -> Optional.ofNullable(individualsMap.get(user.getIndividualId()))
.map(i -> Map.entry(i, user.getUserId())).stream())
.map(e -> new UserDTO(e.getValue(), e.getKey().getFirstName(), e.getKey().getLastName()))
.collect(Collectors.toList());

这假设您有一个这样的构造函数:

public UserDTO(T userId, String firstName, String lastName) { ... }

其中 T 应替换为 userId 的任何类型。

关于java - 使用流从两个数组创建一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51562027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com