【问题标题】:How to retrieve a Set of String from the field of each element in a List of objects that is contained in an object?如何从对象中包含的对象列表中每个元素的字段中检索一组字符串?
【发布时间】:2017-09-29 12:41:25
【问题描述】:

我有一个包含多个字段的对象。其中一个字段是List<Object2>

我想恢复项目 Object2 的所有名称 (Object2.getName()) 的列表(或集合,因为我不需要重复项)。

我尝试如下:

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

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

另外,我担心流的复杂性。

谢谢。

【问题讨论】:

  • 你可以使用.distinct().collect(Collectors.toList())

标签: java list java-8 set java-stream


【解决方案1】:

您无需收集然后重新流式传输。只需调用 getName。 这个怎么样?

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

【讨论】:

  • 如果我想返回一个List<Object2>,我可以按照@Jeremy Grand 的建议用.distinct().collect(Collectors.toList()) 修改最后一行。谢谢。
【解决方案2】:
 getList().stream()
          .flatmap(x -> x.getListObject2().map(Object2::getName))
          .collect(Collectors.toSet());

【讨论】:

    猜你喜欢
    • 2019-07-29
    • 2020-06-01
    • 2021-07-18
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多