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