首页 > 解决方案 > 使用流从两个数组创建一个数组

问题描述

我有如下代码:

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

标签: javajava-8java-stream

解决方案


未经测试,但您可以尝试类似的方法:

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()来简化它的初始化。


推荐阅读