J'ai un programme Java avec une carte de type
qui contient tous les objets Project et chaque objet de Project contient une liste d'objets Process associés, c'est-à-dire List
.
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() } } } } }
et
public class Process { private String name; private String path; private String flow; \\getters and setters follow
J'écris une fonction pour trouver la distance de chaîne (en utilisant JaroWinklerDistance ) entre le
flux
de chaque Process
(dans tous les projets). J'ai proposé ce qui suit:
public class Project { private String name; private Path path; private List<Process> processes; \\ getters and setters follow
Existe-t-il un moyen plus efficace et plus élégant d'y parvenir?
3 Réponses :
Peut-être avec 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*/});
Avec un peu de sucre peut-être:
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() } } } }
List<Process> allProcesses = projects.values() .stream() .flatMap(p->p.getProcesses().stream()); for (Process currentProcess : allProcesses) { for (Process process : allProcesses) { //distance calculation } }
qu'entendez-vous exactement par comparaison? que voulez-vous obtenir par comparaison?
Ceci est un doublon possible de stackoverflow.com/questions/4994021/...
@Kartik J'ai édité mon article pour spécifier la comparaison que je souhaite faire
Voulez-vous vraiment comparer chaque processus avec tous les autres processus? La performance de ça va être vraiment mauvaise. Pour 10 projets avec 10 processus chacun, ce sera 10k comparaisons.