99 Bottles of Beer in Totallylazy

[java]import static com.googlecode.totallylazy.Runnables.printLine; import static com.googlecode.totallylazy.lambda.Lambdas.n; import static com.googlecode.totallylazy.lambda.Lambdas.λ; import static com.googlecode.totallylazy.numbers.Numbers.decrement; import static com.googlecode.totallylazy.numbers.Numbers.range;

public class BottlesOfBeer { // Run with -javaagent:enumerable-java-0.4.0.jar -cp:totallylazy-598.jar:enumerable-java-0.4.0.jar public static void main(String[] args) { range(99, 0).map(λ(n, verse(n))).each(printLine("%s of beer on the wall.\n")); }

private static String verse(Number number) {
    if (number.equals(0))
        return "No more bottles of beer on the wall, no more bottles of beer.\n" +
               "Go to the store and buy some more, 99 bottles";
    return String.format("%s of beer on the wall, %1$s of beer.\n" +
        "Take one down and pass it around, %s", bottles(number), bottles(decrement(number)));
}

private static String bottles(Number number) {
    if (number.equals(0)) return "no more bottles";
    if (number.equals(1)) return "1 bottle";
    return number + " bottles";
}

}[/java]