我有一个类型为 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
}
我正在尝试编写一个函数,它将返回 Stream
的Process
或Process.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/