X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FBasicLibrary.java;h=8ec4e5620655ad148fb6b4b47b2c16d0f4284ee8;hp=b3b49fdbce50ec5aa6b4877af9c42b2a949e39df;hb=97b36d32a43b7fbbd4938c95c4b40db0c68daa71;hpb=8d34f396c1ceec46688b7d440fa4f177cedba56f diff --git a/src/be/nikiroo/fanfix/library/BasicLibrary.java b/src/be/nikiroo/fanfix/library/BasicLibrary.java index b3b49fd..8ec4e56 100644 --- a/src/be/nikiroo/fanfix/library/BasicLibrary.java +++ b/src/be/nikiroo/fanfix/library/BasicLibrary.java @@ -4,12 +4,10 @@ import java.io.File; import java.io.IOException; import java.net.URL; import java.net.UnknownHostException; -import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.TreeMap; import be.nikiroo.fanfix.Instance; @@ -326,48 +324,60 @@ abstract public class BasicLibrary { * * @return the authors' names, grouped by letter(s) */ - public List>> getAuthorsGrouped() { + public Map> getAuthorsGrouped() { int MAX = 20; - List>> groups = new ArrayList>>(); + Map> groups = new TreeMap>(); List authors = getAuthors(); + // If all authors fit the max, just report them as is if (authors.size() <= MAX) { - groups.add(new SimpleEntry>("", authors)); + groups.put("", authors); return groups; } - groups.add(new SimpleEntry>("*", getAuthorsGroup( - authors, '*'))); - groups.add(new SimpleEntry>("0-9", - getAuthorsGroup(authors, '0'))); - + // Create groups A to Z, which can be empty here for (char car = 'A'; car <= 'Z'; car++) { - groups.add(new SimpleEntry>(Character - .toString(car), getAuthorsGroup(authors, car))); + groups.put(Character.toString(car), getAuthorsGroup(authors, car)); } - // do NOT collapse * and [0-9] with the rest - for (int i = 2; i + 1 < groups.size(); i++) { - Entry> now = groups.get(i); - Entry> next = groups.get(i + 1); - int currentTotal = now.getValue().size() + next.getValue().size(); + // Collapse them + List keys = new ArrayList(groups.keySet()); + for (int i = 0; i + 1 < keys.size(); i++) { + String keyNow = keys.get(i); + String keyNext = keys.get(i + 1); + + List now = groups.get(keyNow); + List next = groups.get(keyNext); + + int currentTotal = now.size() + next.size(); if (currentTotal <= MAX) { - String key = now.getKey().charAt(0) + "-" - + next.getKey().charAt(next.getKey().length() - 1); + String key = keyNow.charAt(0) + "-" + + keyNext.charAt(keyNext.length() - 1); + List all = new ArrayList(); - all.addAll(now.getValue()); - all.addAll(next.getValue()); - groups.set(i, new SimpleEntry>(key, all)); - groups.remove(i + 1); - i--; + all.addAll(now); + all.addAll(next); + + groups.remove(keyNow); + groups.remove(keyNext); + groups.put(key, all); + + keys.set(i, key); // set the new key instead of key(i) + keys.remove(i + 1); // remove the next, consumed key + i--; // restart at key(i) } } - for (int i = 0; i < groups.size(); i++) { - if (groups.get(i).getValue().size() == 0) { - groups.remove(i); - i--; + // Add "special" groups + groups.put("*", getAuthorsGroup(authors, '*')); + groups.put("0-9", getAuthorsGroup(authors, '0')); + + // Prune empty groups + keys = new ArrayList(groups.keySet()); + for (String key : keys) { + if (groups.get(key).isEmpty()) { + groups.remove(key); } }