public void initComponents() { competitors = DB.getCompetitors(turniej.getId()) .stream() .filter(c -> c.getGoesFinal()) .collect(Collectors.toList()); competitorMap = competitors.stream().collect(Collectors.toMap(c -> c.getId(), c -> c)); singleGames = DB.getSingleGames(turniej.getId(), true) .stream() .filter( sg -> competitorMap.containsKey(sg.getCompetitorW()) && competitorMap.containsKey(sg.getCompetitorB())) .collect(Collectors.toList()); // filtrowanie powyżej, bo baza zwraca również gry, // gdzie grali (dostał się do finałów) vs (nie dostał się) // można to naprawić w bazie for (Competitor c : competitors) { competitorGames.put(c, new LinkedList<>()); } for (SingleGame sg : singleGames) { competitorGames.get(competitorMap.get(sg.getCompetitorW())).add(sg); competitorGames.get(competitorMap.get(sg.getCompetitorB())).add(sg); } removeAll(); table = new JTable(new MyTableModel()); add(new JScrollPane(table)); updateTables(); }
void updateTables() { for (Competitor c : competitors) { competitorWon.put(c, 0); competitorLost.put(c, 0); competitorTie.put(c, 0); for (SingleGame sg : competitorGames.get(c)) { Competitor c1 = competitorMap.get(sg.getCompetitorW()); // gra białymi Competitor c2 = competitorMap.get(sg.getCompetitorB()); // gra czarnymi int score = sg.getScore(); // 1 - wygrały białe, 2 - czarne, 3 - remis; if (score == 1 && c.equals(c1)) competitorWon.put(c, competitorWon.get(c) + 1); if (score == 2 && c.equals(c2)) competitorWon.put(c, competitorWon.get(c) + 1); if (score == 1 && c.equals(c2)) competitorLost.put(c, competitorLost.get(c) + 1); if (score == 2 && c.equals(c1)) competitorLost.put(c, competitorLost.get(c) + 1); if (score == 3) competitorTie.put(c, competitorTie.get(c) + 1); } float points = 1.0f * competitorWon.get(c) + 0.5f * competitorTie.get(c); competitorPoints.put(c, points); } for (Competitor c : competitors) { float SBPoints = 0.0f; for (SingleGame sg : competitorGames.get(c)) { Competitor c1 = competitorMap.get(sg.getCompetitorW()); // gra białymi Competitor c2 = competitorMap.get(sg.getCompetitorB()); // gra czarnymi int score = sg.getScore(); // 1 - wygrały białe, 2 - czarne, 3 - remis; if (score == 1 && c.equals(c1)) SBPoints += competitorPoints.get(c2); if (score == 2 && c.equals(c2)) SBPoints += competitorPoints.get(c1); if (score == 3 && c.equals(c1)) SBPoints += 0.5f * competitorPoints.get(c2); if (score == 3 && c.equals(c2)) SBPoints += 0.5f * competitorPoints.get(c1); } competitorSBPoints.put(c, SBPoints); } competitors.sort( (c1, c2) -> (int) (4. * (competitorSBPoints.get(c2) - competitorSBPoints.get(c1)))); competitors.sort( (c1, c2) -> (int) (2. * (competitorPoints.get(c2) - competitorPoints.get(c1)))); ((AbstractTableModel) table.getModel()).fireTableDataChanged(); }