java - 如何从子集合中收集过滤对象列表

标签 java java-8 java-stream

让我们有数据结构,如下所述。

Class LandResearch {
    Research research;
}

Class Research {
    List<Bonus> bonuses;
}

Class Bonus {
    BonusType bonusType;
    double bonusValue;
}

我的情况是,当我有一个 List<LandResearch>我有具体的 BonusType . 我想收集所有的奖金,这给了BonusType .

用 for cycles 做这不是问题,但我想用流来管理它。

我想替换的现有解决方案。

List<Bonus> bonuses = new ArrayList<>();
for (LandResearch landResearch: landResearches) {
    for (Bonus bonus: landResearch.getResearch().getBonuses()){
        if (bonus.getBonusType().equals(searchedBonusType)){
            bonuses.add(bonus);
        }
    }
}

感谢您的帮助和提示。

最佳答案

使用 flatMap 生成所有 Bonus 实例的 Stream,然后过滤并收集到 List :

List<Bonus> bonuses =
    landResearches.stream() // Stream<LandResearch>
                  .flatMap(l->l.getResearch().getBonuses().stream()) // Stream<Bonus>
                  .filter(b->b.getBonusType().equals(searchedBonusType)) // Stream<Bonus>
                  .collect(Collectors.toList()); // List<Bonus>

关于java - 如何从子集合中收集过滤对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51854357/

相关文章:

java - 为什么我无法在 java Stream 的代码中使用收集器?

java - 从部署到已运行的 Tomcat 8 实例的 Spring Boot WAR 文件中获取 Tomcat 运行的端口

java - 如何将数据从一个 JList 复制到另一个 JList

java - 在java中解析一个xml字符串?

java - 寻找以前的工作目录来实现 "cd -"

java - 嵌套列表java 8流之间的交集

Java 8 Streams : why does Collectors. toMap 对于带有通配符的泛型表现不同?

java - 使用 java 流将包含标题和行的 csv 文件转换为 hashmap 数组

java - 如何将带有条件的 for 迭代转换为 Java 8 流

java - 使用 Stream 时返回 Collection 中的数组索引