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

标签 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;
    }
}

这是 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>

关于java - 从内部列表 java 8 的对象列表中获取 ID 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54862574/

相关文章:

Javascript 映射集合

.net - 哪个更快 : clear collection or instantiate new

java - 为什么只有在使用 count() 函数时才执行 map() 函数内的表达式?

java - 方法重载标准协议(protocol)?

java - 替换多个 if 语句抛出异常的优雅方式

java - 何时在 Java 中使用 "static"的这些变体

c# - 将 'System.Collections.Generic.IEnumerable<T>' 转换为 'System.Collections.ObjectModel.Collection<T>'

java - Jackson:反序列化为不同类型

java - jstack 是否停止在较新的 JDK8 版本上工作?

java - 确定 2 个 LocalDate 对象之间的周数