import java.util.Objects;
class Ideone {
public static void main
(String[] args
) { Loop.from(0).to(10).execute(() -> {
System.
out.
println("Hello World!"); });
}
}
class Loop {
private final int from;
private final int to;
private Loop(Builder builder) {
this.from = builder.from();
this.to = builder.to();
}
public static Builder from(int from) {
return new Builder().from(from);
}
public static Builder to(int to) {
return new Builder().to(to);
}
public void execute
(Runnable executable
) { for (int i = from; i < to; i++) {
executable.run();
}
}
pupblic static class Builder {
private int from = 0;
private Builder() {}
public Builder from(int from) {
this.from = from;
return this;
}
private int from() {
return from;
}
public Builder to(int to) {
this.to = to;
return this;
}
private int to() {
return to;
}
public void execute
(Runnable runnable
) { Objects.requireNonNull(runnable);
new Loop(this).execute(runnable);
}
}
}
aW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwoKY2xhc3MgSWRlb25lIHsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgIExvb3AuZnJvbSgwKS50bygxMCkuZXhlY3V0ZSgoKSAtPiB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8gV29ybGQhIik7CiAgICAgICAgfSk7CiAgICB9Cn0KCmNsYXNzIExvb3AgewogICAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJvbTsKICAgIHByaXZhdGUgZmluYWwgaW50IHRvOwoKICAgIHByaXZhdGUgTG9vcChCdWlsZGVyIGJ1aWxkZXIpIHsKICAgICAgICB0aGlzLmZyb20gPSBidWlsZGVyLmZyb20oKTsKICAgICAgICB0aGlzLnRvID0gYnVpbGRlci50bygpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBmcm9tKGludCBmcm9tKSB7CiAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKCkuZnJvbShmcm9tKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgdG8oaW50IHRvKSB7CiAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKCkudG8odG8pOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoUnVubmFibGUgZXhlY3V0YWJsZSkgewogICAgICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgdG87IGkrKykgewogICAgICAgICAgICBleGVjdXRhYmxlLnJ1bigpOwogICAgICAgIH0KICAgIH0KCiAgICBwdXBibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKICAgICAgICBwcml2YXRlIGludCBmcm9tID0gMDsKICAgICAgICBwcml2YXRlIEludGVnZXIgdG8gPSBudWxsOwoKICAgICAgICBwcml2YXRlIEJ1aWxkZXIoKSB7fQoKICAgICAgICBwdWJsaWMgQnVpbGRlciBmcm9tKGludCBmcm9tKSB7CiAgICAgICAgICAgIHRoaXMuZnJvbSA9IGZyb207CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBpbnQgZnJvbSgpIHsKICAgICAgICAgICAgcmV0dXJuIGZyb207CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgQnVpbGRlciB0byhpbnQgdG8pIHsKICAgICAgICAgICAgdGhpcy50byA9IHRvOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHByaXZhdGUgaW50IHRvKCkgewogICAgICAgICAgICByZXR1cm4gdG87CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgdm9pZCBleGVjdXRlKFJ1bm5hYmxlIHJ1bm5hYmxlKSB7CiAgICAgICAgICAgIE9iamVjdHMucmVxdWlyZU5vbk51bGwocnVubmFibGUpOwogICAgICAgICAgICBuZXcgTG9vcCh0aGlzKS5leGVjdXRlKHJ1bm5hYmxlKTsKICAgICAgICB9CiAgICB9Cn0=