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
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 User
par ID:
List<UserCompanyView> views = userCompanies.stream()
.map(uc -> new UserCompanyView(usersById.get(uc.getUserId()), uc))
.collect(Collectors.toList())
S'il y a des UserCompany
s sans correspondance User
s, vous pouvez les filtrer en ajoutant ceci avant map()
:
.filter(uc -> usersById.containsKey(uc.getUserId()))