java - 根据其他成员对象的值获取对象流

标签 java java-stream

我有一个类型为 Project 的 Java 类其中包含 Process 类型的 map 并且 Process 类随后包含 Activity 类型的 Map .

public class Project {
    private String name;
    private Path path;
    private Map<String, Process> processes;
    //getters and setters
    }

public class Process {
    private String name;
    private String path;
    private Map<String, Activity> activities;
    //getters and setters
    }

public class Activity {
    private String name;
    private String type;
    //getters and setters
    }

我正在尝试编写一个函数,它将返回 StreamProcessProcess.path其中Process包含至少一项具有 type="starter" 的 Activity 即Activity.type="starter" .

我想出了下面的代码,但它返回 Stream<Activity>而我正在寻找的是 Stream<Process>Stream<String>包含path .

project.processes.values().stream()
    .flatMap(process -> process.getActivities().values().stream()
            .filter(activity -> "starter".equals(activity.getType())));

最有效的方法是什么?

最佳答案

不要使用flatMap如果你想要 Stream<Process>因为flatMap将“销毁”有关进程的信息。

您应该创建一个“嵌套”流:

project.getProcesses().values().stream()
        .filter(x -> 
                x.getActivities().values().stream().anyMatch(
                        y -> "starter".equals(y.getType())
                )
        );

现在是Stream<Process> .

关于java - 根据其他成员对象的值获取对象流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55245977/

相关文章:

Java - 使用条件和 Lambda 在数组中查找元素

java - 在 vector 类中加载 vector (Java)

java - Citrus Framework - 可以从响应中分配变量吗?

java - 使用 .jar 文件编辑 .jar 文件

java - 将数字字符串转换为整数列表

java - 使用流将对象聚合到 Java 中的集合中

Java Swing : Insert JTable column into mysql database

java - 如何在Java中的类中构造一组对象

Java 流压缩两个列表

java - 管理具有多个结果的 Java 8 流的最佳实践是什么