Zadanie na laboratorium 10:

Jako ostatnie małe zadanie z laboratorium, napiszemy sobie prosty program do podliczania wyników wyborów prezydenckich.

W wyborach startują kandydaci, którzy mogą reprezentować partie polityczne, bądź też być niezależni.
Każdy kandydat, oprócz być może partii, ma swoje imię, nazwisko, i płeć.
Partia polityczna cechuje się swoją nazwą oraz niczym specjalnie więcej (powiedzmy, na potrzeby tego zadania). 
Kolekcja kandydatów startujących w wyborach powinna być przekazana w konstruktorze wyborów.

Dany wyborca może zostać zapytany o swój głos. 
Wtedy przekazuje mu się kolekcję kandydatów, a on może bądź wybrać jednego z nich i zwrócić jako wynik, bądź odmówić udziału w głosowaniu/oddać nieważny głos, czyli zwrócić null.
Należy zaimplementować co najmniej 4 strategie wyborców:
 - Partyjniak: ma swoją ulubioną partię, przegląda kandydatów i wybiera losowo wybranego spośród tych, którzy reprezentują jego partię. Jeśli takiego nie ma, oddaje nieważny głos.
 - Antysystemowiec: z prawdopodobieństwem 1/2 oddaje nieważny głos, z prawdopodobieństwem 1/2 głosuje na losowo wybranego kandydata niezależnego.
 - Feminista: Oddaje głos na kobietę o alfabetycznie najniższym nazwisku. Jeśli nie ma kobiet wśród kandydatów, oddaje nieważny głos.
 - Znudzony: zawsze oddaje nieważny głos.
Wybory powinny mieć metodę, która dostawszy kolekcję wyborców przeprowadza wybory i zapisuje w sobie wyniki. 
Następnie powinna być metoda giveResults(), która zwraca wyniki wyborów w formie tekstowej (jako String) w następującym formacie.
Najpierw powinna być frekwencja (stosunek liczby głosów ważnych do wszystkich), a potem kolejno kandydaci wraz z ich wynikami procentowymi, posortowani nierosnąco po wynikach. 
Każdy kandydat powinien mieć w nawiasie swoją partię, bądź informację, że jest niezależny). 
Wszystkie wyniki powinny być podane z dokładnością do 2 miejsc po przecinku. 
Przykładowy format z zupełnie przypadkowymi przykładami jest poniżej:

Turnout 48.96%
Duda (PiS) : 34.76%
Komorowski (PO) : 33.77%
Kukiz (Independent) : 20.80%
Korwin-Mikke (Korwin) : 3.24%
Ogorek (SLD) : 2.38%
Jarubas (PSL) : 1.60%
Palikot (TR) : 1.42%
Braun (Independent) : 0.83%
Kowalski (RN) : 0.52%
Wilk (Independent) : 0.44%
Tanajno (Independent) : 0.20%

Oczywiście, proszę też napisać metodę main, która sprawdzi na prostych przykładach, że funkcjonalność działa poprawnie. 
Termin wysyłania zadania: 31 maja, 12:15

==================================

Rzeczy, które mogą się przydać:
  - Interfejsy Map<K,V> oraz Set<V>
  - Klasy HashMap<K,V> oraz HashSet<V>
  - Interfejs Map.Entry<K,V>
  - Interfejs Comparator<T>
  - Collections.sort(), w szczególności taki z dawanym własnym komparatorem.
    Tu proszę pogooglować "java collections comparator" i się naumieć jak się tworzy komparatory i sortuje używając ich.
  - String.format("...",...)