2017-09-29 46 views
2

我有一個對象與多個字段。其中一個字段是List<Object2>如何從包含在對象中的對象列表中的每個元素的字段中檢索一組字符串?

我想恢復項目Object2的所有名稱(Object2.getName())的List(或Set,因爲我不需要重複)。

我試圖做到這一點,如下所示:

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

它返回一個Set<Object2>,但不是Set/List<Object2.getName()>

另外,我很關心流的複雜性。

謝謝。

+2

您可以用'.distinct()。收集(Collectors.toList())' –

回答

3

你不需要收集然後重新流。只需調用getName即可。 這個怎麼樣?

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

如果我想要一個'清單'回來後,我可以修改與'.distinct最後一行( ).collect(Collectors.toList())'@Jeremy Grand建議。謝謝。 – user3450862

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