Creating dynamic nested loops on Java
Suppose you need to create such nested loops dynamically:
for (int i = 0; i < 2; i++) {
    for (int j = 1; j < 3; j++) {
        for (int k = 2; k < 4; k++) {
            System.out.println(Arrays.asList(i, j, k));
        }
    }
}With the n-loops library you can make it with the simple builder:
new Loops()
    .from(0).to(2)
    .from(1).to(3)
    .from(2).to(4)
    .action(System.out::println);Result output:
[0, 1, 2]
[0, 1, 3]
[0, 2, 2]
[0, 2, 3]
[1, 1, 2]
[1, 1, 3]
[1, 2, 2]
[1, 2, 3]
Suppose we need to generate loops like this:
for (int i = 0; i < 3; i += 2) {
    for (int j = 7; j > 2; j--) {
        for (int k = 18; k > 5; k -= 3) {
            for (int l = 1; l < 4; l++) {
                System.out.println(Arrays.asList(i, j, k, l));
            }
        }
    }
}This is also pretty straightforward to implement with the library's DSL:
new Loops()
    .from(0).to(3).step(2)
    .from(7).to(2)
    .from(18).to(5).step(3)
    .from(1).to(4)
    .action(System.out::println);Suppose we need to generate loops which iterating over real values:
for (double i = 0; i < 2.5; i++) {
    for (double j = 1.5; j < 3.99; j += 0.5) {
        for (double k = 2.5; k < 4.5; k += 0.1) {
            System.out.println(Arrays.asList(i, j, k));
        }
    }
}In this case use the Loops#real method:
new Loops().real()
        .from(0).to(2.5)
        .from(1.5).to(3.99).step(0.5)
        .from(2.5).to(4.5).step(0.1)
        .action(System.out::println);If you need loops depending on current value in the loop above (parent loop):
for (int i = 0; i < 2; i++) {
   for (int j = i; j < 3; j++) {
      for (int k = j + 1; k < 4; k++) {
         for (int l = 1; l < k + 2; l++) {
            target.append(Arrays.asList(i, j, k, l));
         }
      }
   }
}You could use such construction:
new Loops()
        .from(0).to(2)
        .fromAbove(0).to(3)
        .fromAbove(+ 1).to(4)
        .from(1).toAbove(+ 2)
        .action(System.out::println);- 
Add the
jitpackrepository in yourpom.xml<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories>
 - 
Add the
n-loopsdependency<dependency> <groupId>com.github.0x100</groupId> <artifactId>n-loops</artifactId> <version>master-SNAPSHOT</version> </dependency>
 
- 
Add the
jitpackrepository in your rootbuild.gradleat the end of repositories:allprojects { repositories { // ... maven { url 'https://jitpack.io' } } } - 
Add the dependency
dependencies { implementation 'com.github.0x100:n-loops:master-SNAPSHOT' } 
Additional examples of using the API see in unit tests.
Fork the repository, make changes, write a test for your code, send me a pull request. I will review your changes and apply them to the master branch shortly, provided they don't violate quality standards. To avoid frustration, before sending a pull request please run the Maven build:
$ mvnw clean package
Good luck and have fun!