Java 8 flux: combiner les propriétés de deux objets qui se trouvent dans ArrayLists dans une liste de tableaux d'un troisième type d'objet

Faenikshll0998:

Je suis nouveau sur les flux Java 8 et apprécierait un peu d'aide dans l'apprentissage.

J'ai un Arraylist d'objets utilisateur et des objets et Arraylist UserCompany. L'objet utilisateur dispose d'une user_id et les informations utilisateur associées La liste des UserCompany a l'objet société de l'utilisateur mais ne dispose que la user_id de l'utilisateur. Je voudrais créer un troisième objet appelé UserCompanyView qui est une combinaison de l'objet utilisateur et l'objet de l'entreprise en utilisant Java 8 flux. Je n'ai pu trouver des exemples de deux réseaux étant concaténé ou fusionnés, comme ,:

 Stream.of(list1, list2)
.flatMap(x -> x.stream())
.collect(Collectors.toList());

mais rien où propriétés spécifiques des listes individuelles sont utilisés pour créer un troisième objet.

le code devrait:

1) parcourir la liste UserCompany

2) Vérifiez si le user_id UserCompany correspond à la liste des utilisateurs user_id

3) si 2 est vrai, créer un objet en utilisant UserCompanyView l'utilisateur et le UserCompany

4) Ajouter le UserCompanyView de 3 à une nouvelle liste et le retourner.

Merci pour regarder ce poste et prendre le temps de réponse

shmosel:

Si elles ne suivent pas le même ordre, vous devrez créer une carte d'identité d'abord:

Map<Integer, User> usersById = users.stream()
        .collect(Collectors.toMap(User::getUserId, u -> u));

Maintenant , vous pouvez diffuser l'autre liste et la carte chaque élément à son correspondant Userpar ID:

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

S'il y a des UserCompanys sans correspondance Users, vous pouvez les filtrer en ajoutant ceci avant map():

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

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=120354&siteId=1
conseillé
Classement