Java 8 fluxos: Combinar propriedades de dois objectos que se encontram em ArrayLists em um ArrayList de um terceiro tipo de objecto

Faenikshll0998:

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

shmosel:

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 Userpor ID:

List<UserCompanyView> views = userCompanies.stream()
        .map(uc -> new UserCompanyView(usersById.get(uc.getUserId()), uc))
        .collect(Collectors.toList())

Se houver UserCompanys sem correspondência Users, você pode filtrá-los, adicionando isso antes map():

.filter(uc -> usersById.containsKey(uc.getUserId()))

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=120352&siteId=1
Recomendado
Clasificación