Zadanie na laboratorium 12: Po pierwsze, proszę pracować dalej nad zadaniem o wyborach. Ci, którzy już skończyli, bądź chcieliby je kończyć w domu, są proszeni o zrobienie następującego zadania. (1) Proszę zaimplementować stworzyć klasę abstrakcyjną Filter, z ćwiczeń sprzed jakiegoś czasu. Klasa ta powinna mieć jedną metodę abstrakcyjną test(A a), która stwierdza czy a spełnia dany warunek. W podklasach odpowiadających różnym filtrom ta metoda będzie odpowiednio przeładowana. (2) Proszę zaimplementować klasę FilteredIntegerIterator, która implementuje iterator chodzący po liczbach całkowitych. Klasa powinna implementować interfejs ListIterator; proszę sprawdzić w dokumentacji jakie metody są potrzebne. Iterator powinien chodzić po elementach spełniających metodę test w filtrze zadanym w konstruktorze. Na początku jako next powinien wskazywać na najmniejszą liczbę >=0 spełniającą test, zaś jako prev na największą liczbę ujemną. Indeksy zwracane przez previousIndex() i nextIndex() pownny być numerem liczby całkowitej spełniającej filtr, przy czym indeks zero jest nadawany pierwszej liczbie nieujemnej spełniającej go. Metody remove(), add() i set() mają rzucać własnoręcznie zdefiniowany wyjątek. (3) Proszę zaimplementować metodę statyczną factor(int n), zwracającą rozkład danej liczby naturalnej na czynniki pierwsze. Rozkład powinien być dany jako mapa Integer -> Integer, która mówi, jaka liczba pierwsza jest w jakiej potędze w rozkładzie n. W algorytmie użyj klasy FilteredIntegerIterator z filtrem odfiltrowującym liczby pierwsze. Oczywiście, proszę napisać prostego main-a, który pokazuje że rozwiązanie działa.