Moin Moin!
Ich habe in einem TableModel ein Feld "Authors" mit Autorennamen von Artikeln. Für jeden Artikel (= Tabellenzeile) gibt es einen Wert für das Feld "Authors" nach dem folgenden Muster:
"Müller P, Hansen TH, Mayer H, Schmidt K, Ludwig J".
Ich gebe in einem JEditorPane eines JDialogs eine Statistik aus, bei wievielen Artikeln ein Autor beteiligt war. Also z.B.
#################
Ludwig J | 10
Schmidt K | 4
Mayer H | 4
Hansen TH |2
Müller P |1
Franzen G | 1
Claasen | 1
#################
Das funktioniert mit dem unten stehenden Code auch schon recht gut, allerdings dauert es recht lange. Hat jemand eine gute Idee wie ich die Performance deutlich steigern kann? Ich habe knapp 1000 Artikel in der Tabelle und im Schnitt sind es so 5 bis 8 Autoren.
In Worten beschrieben funktioniert der Code so: Ich gehe jeden Artikel (= Paper) aus dem TableModel durch, lese dessen Autorenliste (ein String) aus und splitte diese Anhand der Kommata (jetzt ein String[]). Nun erstelle ich eine HashMap mit dem Autorennamen als Key und der Häufigkeit dessen vorkommens als Value. Wenn ein Autor bereits in der HashMap ist, dann wird sein Value um 1 erhöht. Zum Schluss wird eine HTML-Tabelle aus der HashMap erstellt.
Dieser Prozess nimmt einiges an Zeit in Anspruch. Wie geht es schneller? ;-)
Ich habe in einem TableModel ein Feld "Authors" mit Autorennamen von Artikeln. Für jeden Artikel (= Tabellenzeile) gibt es einen Wert für das Feld "Authors" nach dem folgenden Muster:
"Müller P, Hansen TH, Mayer H, Schmidt K, Ludwig J".
Ich gebe in einem JEditorPane eines JDialogs eine Statistik aus, bei wievielen Artikeln ein Autor beteiligt war. Also z.B.
#################
Ludwig J | 10
Schmidt K | 4
Mayer H | 4
Hansen TH |2
Müller P |1
Franzen G | 1
Claasen | 1
#################
Das funktioniert mit dem unten stehenden Code auch schon recht gut, allerdings dauert es recht lange. Hat jemand eine gute Idee wie ich die Performance deutlich steigern kann? Ich habe knapp 1000 Artikel in der Tabelle und im Schnitt sind es so 5 bis 8 Autoren.
In Worten beschrieben funktioniert der Code so: Ich gehe jeden Artikel (= Paper) aus dem TableModel durch, lese dessen Autorenliste (ein String) aus und splitte diese Anhand der Kommata (jetzt ein String[]). Nun erstelle ich eine HashMap mit dem Autorennamen als Key und der Häufigkeit dessen vorkommens als Value. Wenn ein Autor bereits in der HashMap ist, dann wird sein Value um 1 erhöht. Zum Schluss wird eine HTML-Tabelle aus der HashMap erstellt.
Dieser Prozess nimmt einiges an Zeit in Anspruch. Wie geht es schneller? ;-)
Java:
int n = model.getRowCount();
System.out.println("table rows = " + n);
ArrayList<Paper> papers = model.getPapers();
HashMap<String, Integer> stats = new HashMap<String, Integer>();
for (int i = 0; i < n; i++) {
String authors = papers.get(i).getAuthorList();
String[] array = authors.split(",");
for (int j = 0; j < array.length; j++) {
String author = array[j].trim().toUpperCase();
int count = stats.containsKey(author) ? stats.get(author) : 0;
stats.put(author, count + 1);
}
}
System.out.println("number of authors = " + stats.size());
for (Map.Entry e : stats.entrySet()) {
sb.append("<tr><td>" + e.getKey() + "</td><td>" + e.getValue() + "</td></tr>");
}
Zuletzt bearbeitet von einem Moderator: