package mage.db; import mage.db.model.Log; import java.util.*; /** * @author noxx */ public class Statistics { public static void main(String[] args) throws Exception { EntityManager.instance.testDB(); List logs = EntityManager.instance.getAllLogs(); System.out.println("logs found: " + logs.size()); Map nicknames = displayCommonNumbers(logs); List games = displayTop3(nicknames); displayPlayedOnlyOnce(games); System.out.println("Done"); } private static void displayPlayedOnlyOnce(List games) { Integer oneGame = 0; for (Integer numberOfGames : games) { if (numberOfGames == 1) { oneGame++; } } System.out.println("Number of players played only one game: " + oneGame); } private static List displayTop3(Map nicknames) { Collection values = nicknames.values(); List games = new ArrayList(); games.addAll(values); Collections.sort(games, new Comparator() { @Override public int compare(Integer i1, Integer i2) { return i2.compareTo(i1); } }); // Top-3 List numbersToFind = new ArrayList(); for (Integer numberOfGames : games) { numbersToFind.add(numberOfGames); if (numbersToFind.size() == 3) { break; } } Map players = new LinkedHashMap(); for (Map.Entry entry : nicknames.entrySet()) { if (check(numbersToFind, entry.getValue())) { players.put(entry.getValue(), entry.getKey()); } if (players.size() == 3) { break; } } System.out.println("Top-3"); for (Map.Entry entry : players.entrySet()) { System.out.println(" " + entry.getValue() + ": " + entry.getKey()); } return games; } private static Map displayCommonNumbers(List logs) { int count = 0; Map nicknames = new HashMap(); for (Log log : logs) { if (log.getKey().equals("gameStarted")) { if (log.getArguments() != null) { int index = 0; for (String argument : log.getArguments()) { if (index > 0) { inc(nicknames, argument); } index++; } } count++; } } System.out.println("********************************"); System.out.println("Games played: " + count); System.out.println("Number of players: " + nicknames.size()); return nicknames; } public static void inc(Map map, String player) { if (map.containsKey(player)) { Integer count = map.get(player); count++; map.put(player, count); } else { map.put(player, 1); } } public static boolean check(List numbers, Integer value) { for (Integer number : numbers) { if (number.equals(value)) { return true; } } return false; } }