import java.util.*; class AlphabetIterator implements Iterator { // keeps track of which one we're on and whether we are uppercase or not private char current; private boolean upper; // starts out on a or A public AlphabetIterator(boolean uppercase) { if (uppercase) { current = 'A'; } else { current = 'a'; } upper = uppercase; } // returns whether we have a next value in the sequence @Override public boolean hasNext() { if (upper) { return current <= 'Z'; } else { return current <= 'z'; } } // returns the next one in the sequence @Override public Character next() { Character val = Character.valueOf(current); current++; return val; } } class Alphabet implements Iterable { private boolean uppercase; public Alphabet(boolean uppercase) { this.uppercase = uppercase; } public Iterator iterator() { return new AlphabetIterator(uppercase); } } public class Letters { public static int count(Iterable stuff) { int num = 0; Iterator it = stuff.iterator(); while (it.hasNext()) { num++; it.next(); } return num; } public static ArrayList reverse(Iterable stuff) { ArrayList reversed = new ArrayList<>(); Iterator it = stuff.iterator(); while (it.hasNext()) { reversed.add(0, it.next()); } return reversed; } public static void main(String args[]) { Alphabet letters = new Alphabet(true); for (Character c : letters) { System.out.println(c); } System.out.println(reverse(letters)); } }