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";

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.