Definiowanie własnych obiektów iterowalnych

Ciąg Collatza (znany też jako „hailstone sequence” lub ciąg Ulama) to ciąg liczb naturalnych rozpoczynający się od dowolnej liczby a0, którego kolejne wyrazy obliczane są według zasady

Istnieje hipoteza, że taki ciąg zawsze dojdzie do liczby 1 (i potem będzie już periodyczny: 1,4,2,1,4,2,1,4,...). Została ona sprawdzona aż do astronomicznie wielkich liczb, ale do tej pory nie udało się jej udowodnić.
Na przykład, jeśli rozpoczniemy od liczby 5, otrzymamy ciąg [5,16,8,4,2,1,...], a rozpoczynając od 7 otrzymamy już ciąg dłuższy: [7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1,...].
Zadanie polega na stworzeniu klasy Hailstone, której obiekty reprezentują pojedynczy ciąg Collatza. Konstruktor pobiera liczbę startową (a0), o której można założyć, że zawsze będzie większa od 1. Sam obiekt jest iterowalny, czyli implementuje interfejs Iterable i w każdej iteracji zwraca kolejne elementy ciągu, poczynając od wartości startowej. Iteracja powinna kończyć się po zwróceniu, jako ostatniego elementu, liczby 1.
Implementacja klasy Hailstone

Utworzoną klasę przetestuj za pomocą następującego programu:

Main.java

public class Main {
    public static void main(String... args) {
        int ini = 77031, count = -1, maxel = 0;
        Hailstone hailstone = new Hailstone(ini);
        for (int h : hailstone) {
            if (h > maxel) maxel = h;
            ++count;
        }
        System.out.println(ini + " " + count + " " + maxel);
    }
}

Powinien on wypisać, w jednej linii, oddzielone spacjami, trzy liczby: wartość startową (ini; w tym przykładzie 77031), ilość kroków wykonanych do osiągnięcia jedynki (count), oraz największy wyraz tego ciągu (maxel). Na przykład dla wartości startowej 10, ciąg, aż do uzyskania jedynki, zawierałby elementy [10 5 16 8 4 2 1], a zatem trzy liczby, które wtedy wypisałby program miałyby wartości 10 6 16.