比较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之间的字符串距离(使用)。我想出了以下内容:flowProcess


    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()

                    }

                }

            }

        }

    }

有没有更有效和更优雅的方式来实现这一目标?


阿晨1998
浏览 141回答 3
3回答

DIEA

List<Process> allProcesses = projects.values()&nbsp; &nbsp; .stream()&nbsp; &nbsp; .flatMap(p->p.getProcesses().stream());for (Process currentProcess : allProcesses) {&nbsp; &nbsp; for (Process process : allProcesses) {&nbsp; &nbsp; &nbsp; &nbsp; //distance calculation&nbsp; &nbsp; }}

忽然笑

也许加一点糖:&nbsp; &nbsp; for (Project proj1: projects.values()) {&nbsp; &nbsp; &nbsp; &nbsp; for (Process proc1: proj1.getProcesses()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(Project proj2: projects.values()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(Process proc2: proj2.getProcesses()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //use JaroWinklerDistance to compare proc1.getFlow() with proc2.getFLow()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }

MMMHUHU

也许与Streams:projects.values() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(p->p.getProcesses().stream()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forEach(proc1&nbsp;->&nbsp;&nbsp;projects.values() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(p->p.getProcesses().stream()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forEach(proc2&nbsp;->&nbsp;{/*do&nbsp;something&nbsp;with&nbsp;proc1&nbsp;and&nbsp;proc2*/});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java