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

Er *_*pra 3 java collections java-8 java-stream

我有实体类列表:

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

    public long getId() {
        return id;
    }

    public List<InnerEnity> getData() {
        return data;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 InnerEnity 类

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

    public long getId() {
        return id;
    }

    public String getData() {
        return data;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

List innerEnityIds = listOfEnity.stream().map(sys -> sys.getData().stream().map(obj->obj.getId().collect(Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

在这里你需要flatMap

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

或者,您可以将该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>
Run Code Online (Sandbox Code Playgroud)