【问题标题】:get list of ids from list of objects from inner list java 8从内部列表java 8的对象列表中获取ID列表
【发布时间】:2019-02-25 08:59:40
【问题描述】:

我有实体类列表:

public class Entity
{
    private long id;    
    private List<InnerEnity> data;

    public long getId() {
        return id;
    }

    public List<InnerEnity> getData() {
        return data;
    }
}

这是 InnerEnity 类

public class InnerEnity 
{
    private long id;    
    private String data;

    public long getId() {
        return id;
    }

    public String getData() {
        return data;
    }
}

我需要的是 InnerEnity id 列表。 为了解决这个问题,我正在尝试类似的事情:-

List innerEnityIds = listOfEnity.stream().map(sys -> sys.getData().stream().map(obj->obj.getId().collect(Collectors.toList())));

【问题讨论】:

  • 提示:使用flatMap而不是第一个map

标签: java collections java-8 java-stream


【解决方案1】:

这里你需要flatMap:

List<Long> innerEnityIds = 
    listOfEnity.stream() // Stream<Entity>
               .flatMap(sys -> sys.getData().stream().map(InnerEntity::getId)) // Stream<Long>
               .collect(Collectors.toList()); // List<Long>

或者,您可以将flatMap 步骤分解为flatMap + map

List<Long> innerEnityIds = 
    listOfEnity.stream() // Stream<Entity>
               .flatMap(sys -> sys.getData().stream()) // Stream<InnerEntity>
               .map(InnerEntity::getId) // Stream<Long>
               .collect(Collectors.toList()); // List<Long>

【讨论】:

    【解决方案2】:

    我认为这可能会奏效(尚未测试):

    List<Long> innerEntityIds = listOfEnity.stream()
        .flatMap(e -> e.getData().stream()) // 1
        .map(ie -> ie.getId())  // 2
        .collect(Collectors.toList()); // 3
    

    1) 使用 flatMap 将所有内部实体流式传输到一个流中 2) 将每个内部实体映射到其 id 3) 将 id 收集到一个列表中

    【讨论】:

    • getData() 是列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2019-06-18
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多