Zadanie na laboratorium 11: (1) Proszę zaimplementować stworzyć interfejs Filter, gdzie A jest typem parametrycznym. Interfejs powinien mieć jedną metodę abstrakcyjną test(A a), która stwierdza czy element a spełnia warunek zadany w filtrze. 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ą spełniającą test 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 (implementacja interfejsu Filter). Oczywiście, proszę napisać prostego main-a, który pokazuje że rozwiązanie działa. Tych, którym uda się skończyć, proszę o pracowanie nad scenariuszem z 9-tego laboratorium.