java - 比较Java中列表映射中的每个对象
问题描述
我有一个 Java 程序,其 Map 类型<String, Project>
包含所有 Project 对象,并且 Project 的每个对象都包含一个相关 Process 对象的列表,即List<Process>
.
public class Project {
private String name;
private Path path;
private List<Process> processes;
\\ getters and setters follow
和
public class Process {
private String name;
private String path;
private String flow;
\\getters and setters follow
我正在编写一个函数来查找每个(跨所有项目)JaroWinklerDistance
之间的字符串距离(使用)。我想出了以下内容:flow
Process
public void compareAllProcesses(Map<String, Project> projects) {
Iterator<Project> projIter1 = projects.values().iterator();
while(projIter1.hasNext()) {
Project proj1 = projIter1.next();
Iterator<Process> procIter1 = proj1.getProcesses().iterator();
while(procIter1.hasNext()) {
Process proc1 = procIter1.next();
Iterator<Project> projIter2 = projects.values().iterator();
while(projIter2.hasNext()) {
Project proj2 = projIter2.next();
Iterator<Process> procIter2 = proj2.getProcesses().iterator();
while(procIter2.hasNext()) {
Process proc2 = procIter2.next();
//use JaroWinklerDistance to compare proc1.getFlow() with proc2.getFLow()
}
}
}
}
}
有没有更有效和更优雅的方式来实现这一目标?
解决方案
也许与Stream
s:
projects.values()
.stream()
.flatMap(p->p.getProcesses().stream())
.forEach(proc1 -> projects.values()
.stream()
.flatMap(p->p.getProcesses().stream())
.forEach(proc2 -> {/*do something with proc1 and proc2*/});
推荐阅读
- python - 使用 pre 和 post 方法调用装饰请求模块调用
- reactjs - React-Apollo - 在 getDerivedStateFromProps 之前调用渲染
- node.js - Nodejs bodyparser返回未定义的body变量
- ios - 如何在completionHandler中返回字符串值?
- ruby-on-rails - 在 Rails 中使用 QueryObjects 和模块
- python - 在 Django 中结合 ~Q 和 F?
- swift - 如何模拟按下 macOS 修改键
- sql - Oracle 数据库中的完整性违规
- multithreading - 创建新线程导致异常
- docker - Docker 镜像的安全性