Zadanie na laboratorium 11:

(1) Proszę zaimplementować stworzyć interfejs Filter<A>, 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<Integer>; 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<Integer>).

Oczywiście, proszę napisać prostego main-a, który pokazuje że rozwiązanie działa.