Core Java

Creating your own loop structure in Java 8 lambda

Java doesn’t have an easy construct of repeat something N number of times. We can make a for loop of course, but many times we don’t even care about the variable that we created in the loop. We just want repeat N times of some code and that’s it. With the lambda available in Java 8, you may attempt something like this:

 
 
 
 
 
 

public class RepeatDemo {
    public static void main(String[] args) {
        // One liner repeat
        repeat(10, () -> System.out.println("HELLO"));

        // Multi-liners repeat
        repeat(10, () -> {
            System.out.println("HELLO");
            System.out.println("WORLD");
        });
    }
   
    static void repeat(int n, Runnable r) {
        for (int i = 0; i < n; i++)
            r.run();
    }
}

Probably not as eye pleasing or straight forward as the good fashion for-loop, but you do get rid of the unnecessary loop variable. Only if Java 8 would go extra mile and treat the lambda argument in method with sugar syntax, then we could have it something like the Scala/Groovy style, which makes code more smoother. For example:

 // Wouldn't this be nice to have in Java?
        repeat(10) {
            System.out.println("HELLO");
            System.out.println("WORLD");
        }

Hum….

Subscribe
Notify of
guest

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

2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Hamid
Hamid
10 years ago

interesting post, thanks…
I created a simple class with Builder pattern that creates a loop with this usage style :

link

public static void main(String[] args) {
loop().from(2).to(10).doIt(() -> System.out.println(“Hello World!”));
}

ken
ken
10 years ago

Hi, unless you do want to get rid of redundant loop variable why not to do it this way:

import static java.util.stream.IntStream.*;

range(1, 5).forEach((i)-> System.out.println(“HELLO”));

Back to top button