2017-09-29 15 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()); 
相关问题