Eu sou novo para o Java 8 fluxos e gostaria de receber alguma ajuda para aprender.
Eu tenho um ArrayList de objetos de usuário e e ArrayList de UserCompany objetos. O objeto Usuário tem um user_id e informações do usuário associado a lista UserCompany tem Companhia objeto do usuário, mas só tem o user_id do usuário. Eu gostaria de criar um terceiro objeto chamado UserCompanyView que é uma combinação do objeto de usuário e o objeto da empresa usando Java 8 fluxos. Eu só tenho sido capaz de encontrar exemplos de duas matrizes a ser concatenado ou se fundir, como ,:
Stream.of(list1, list2)
.flatMap(x -> x.stream())
.collect(Collectors.toList());
mas nada onde as propriedades específicas das listas individuais são usados para criar um terceiro objeto.
O código deve:
1) percorrer a lista UserCompany
2) Verifique se o user_id UserCompany corresponda à lista de usuário user_id
3) se 2 é verdade, criar um objeto UserCompanyView usando o usuário eo UserCompany
4) Adicione o UserCompanyView de 3 a uma nova Lista e devolvê-lo.
Agradecimentos para ver este post e tendo tempo para resposta
Se eles não seguem a mesma ordem, você vai precisar para criar um mapa de ID em primeiro lugar:
Map<Integer, User> usersById = users.stream()
.collect(Collectors.toMap(User::getUserId, u -> u));
Agora você pode transmitir a outra lista e mapear cada elemento para a sua correspondência User
por ID:
List<UserCompanyView> views = userCompanies.stream()
.map(uc -> new UserCompanyView(usersById.get(uc.getUserId()), uc))
.collect(Collectors.toList())
Se houver UserCompany
s sem correspondência User
s, você pode filtrá-los, adicionando isso antes map()
:
.filter(uc -> usersById.containsKey(uc.getUserId()))