从内部列表java 8中的对象列表中获取id列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从内部列表java 8中的对象列表中获取id列表相关的知识,希望对你有一定的参考价值。

我有实体类列表:

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

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>
另一答案

我认为这可能会成功(没有测试过):

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收集到列表中

以上是关于从内部列表java 8中的对象列表中获取id列表的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 Stream 按键过滤对象列表。排除列表中的键并获取字符串

从 java 8 流中的列表中过滤值

使用 Java 8 Streams 从列表中仅获取所需的对象

如何从可能是与给定 id 匹配的父级或子级之一的列表中获取对象

如何从联系人列表中获取电子邮件 ID、姓名和号码

使用 C# 从选择列表中获取内部文本值