/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.stream.*;
import static java.util.Spliterator.*;
class Ideone
{
public static class Hoge implements Iterator<List<Integer>> {
final Iterator<Integer> it;
public Hoge(Iterator<Integer> it) {
this.it=it;
}
private List<Integer> nextValue=null;
private boolean isEof = false;
@Override
public boolean hasNext() {
if (!this.isEof && this.nextValue == null) {
if( !this.it.hasNext() ){
this.isEof=true;
}else{
this.nextValue = new ArrayList<Integer>();
for(int i=0;i<3;++i){
if( this.it.hasNext() ){
this.nextValue.add(this.it.next());
}else{
break;
}
}
}
}
return !this.isEof;
}
@Override
public List<Integer> next() {
if( hasNext() ){
List<Integer> result=nextValue;
this.nextValue=null;
return result;
}
}
}
{
var stream = IntStream.range(0, 10);
Spliterator<List<Integer>> spliterator = Spliterators.spliteratorUnknownSize(new Hoge(stream.iterator()), NONNULL);
Stream<List<Integer>> result = StreamSupport.stream(spliterator, false);
result.
forEach(System.
out::println
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLio7CmltcG9ydCBzdGF0aWMgamF2YS51dGlsLlNwbGl0ZXJhdG9yLio7CgpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyBjbGFzcyBIb2dlIGltcGxlbWVudHMgSXRlcmF0b3I8TGlzdDxJbnRlZ2VyPj4gewoJCWZpbmFsIEl0ZXJhdG9yPEludGVnZXI+IGl0OwoJCXB1YmxpYyBIb2dlKEl0ZXJhdG9yPEludGVnZXI+IGl0KSB7CgkJCXRoaXMuaXQ9aXQ7CgkJfQoJCXByaXZhdGUgTGlzdDxJbnRlZ2VyPiBuZXh0VmFsdWU9bnVsbDsKCQlwcml2YXRlIGJvb2xlYW4gaXNFb2YgPSBmYWxzZTsKCQlAT3ZlcnJpZGUKCQlwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgewoJCQlpZiAoIXRoaXMuaXNFb2YgJiYgdGhpcy5uZXh0VmFsdWUgPT0gbnVsbCkgewoJCQkJaWYoICF0aGlzLml0Lmhhc05leHQoKSApewoJCQkJCXRoaXMuaXNFb2Y9dHJ1ZTsKCQkJCX1lbHNlewoJCQkJCXRoaXMubmV4dFZhbHVlID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOwoJCQkJCWZvcihpbnQgaT0wO2k8MzsrK2kpewoJCQkJCQlpZiggdGhpcy5pdC5oYXNOZXh0KCkgKXsKCQkJCQkJCXRoaXMubmV4dFZhbHVlLmFkZCh0aGlzLml0Lm5leHQoKSk7CgkJCQkJCX1lbHNlewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkJcmV0dXJuICF0aGlzLmlzRW9mOwoJCX0KCQlAT3ZlcnJpZGUKCQlwdWJsaWMgTGlzdDxJbnRlZ2VyPiBuZXh0KCkgewoJCQlpZiggaGFzTmV4dCgpICl7CgkJCQlMaXN0PEludGVnZXI+IHJlc3VsdD1uZXh0VmFsdWU7CgkJCQl0aGlzLm5leHRWYWx1ZT1udWxsOwoJCQkJcmV0dXJuIHJlc3VsdDsKCQkJfQoJCQl0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigpOwoJCX0KCX0KCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCXZhciBzdHJlYW0gPSBJbnRTdHJlYW0ucmFuZ2UoMCwgMTApOwoJCVNwbGl0ZXJhdG9yPExpc3Q8SW50ZWdlcj4+IHNwbGl0ZXJhdG9yID0gU3BsaXRlcmF0b3JzLnNwbGl0ZXJhdG9yVW5rbm93blNpemUobmV3IEhvZ2Uoc3RyZWFtLml0ZXJhdG9yKCkpLCBOT05OVUxMKTsKCQlTdHJlYW08TGlzdDxJbnRlZ2VyPj4gcmVzdWx0ID0gU3RyZWFtU3VwcG9ydC5zdHJlYW0oc3BsaXRlcmF0b3IsIGZhbHNlKTsKCQlyZXN1bHQuZm9yRWFjaChTeXN0ZW0ub3V0OjpwcmludGxuKTsKCX0KfQo=