2017-09-29 2 views
2

J'ai un objet avec plusieurs champs. L'un des champs est un List<Object2>.Comment récupérer un ensemble de chaînes à partir du champ de chaque élément d'une liste d'objets contenus dans un objet?

Je veux récupérer une liste (ou un ensemble parce que je n'ai pas besoin du dupliqué) de tous les noms (Object2.getName()) des objets Object2.

J'ai essayé de le faire comme suit:

getList().stream() 
     .map(Object::getListObject2) 
     .collect(Collectors.toSet()) 
     .stream() 
     .flatMap(List::stream) 
     .collect(Collectors.toSet()); 

Il retourne un Set<Object2>, mais pas un Set/List<Object2.getName()>.

En outre, je suis préoccupé par la complexité du flux.

Merci.

+2

vous pouvez utiliser '.distinct(). Recueillir (Collectors.toList())' –

Répondre

3

Vous n'avez pas besoin de collecter puis de rediffuser. Appelez simplement getName. Que diriez-vous de cela?

getList().stream() 
    .map(Object::getListObject2) 
    .flatMap(List::stream) 
    .map(Object2::getName) 
    .collect(Collectors.toSet()); 
+0

Et si je veux une liste '' retour, je peux modifier la dernière ligne avec '.distinct () .collect (Collectors.toList()) 'comme @Jeremy Grand suggéré. Je vous remercie. – user3450862

1
getList().stream() 
      .flatmap(x -> x.getListObject2().map(Object2::getName)) 
      .collect(Collectors.toSet());