为了账号安全,请及时绑定邮箱和手机立即绑定

比较Java中列表映射中的每个对象

比较Java中列表映射中的每个对象

阿晨1998 2022-06-23 20:25:41
我有一个 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()                    }                }            }        }    }有没有更有效和更优雅的方式来实现这一目标?
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超3个赞

List<Process> allProcesses = projects.values()

    .stream()

    .flatMap(p->p.getProcesses().stream());


for (Process currentProcess : allProcesses) {

    for (Process process : allProcesses) {

        //distance calculation

    }

}


查看完整回答
反对 回复 2022-06-23
?
忽然笑

TA贡献1806条经验 获得超5个赞

也许加一点糖:


    for (Project proj1: projects.values()) {

        for (Process proc1: proj1.getProcesses()) {

            for(Project proj2: projects.values()) {

                for(Process proc2: proj2.getProcesses()) {

                    //use JaroWinklerDistance to compare proc1.getFlow() with proc2.getFLow()

                }

            }

        }

    }


查看完整回答
反对 回复 2022-06-23
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

也许与Streams:

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*/});



查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号