Skip to content

Instantly share code, notes, and snippets.

@izebit
Created July 10, 2019 19:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save izebit/50fdc042a4b05facbe25c4c929567a0d to your computer and use it in GitHub Desktop.
Save izebit/50fdc042a4b05facbe25c4c929567a0d to your computer and use it in GitHub Desktop.
class IteratorWrapper implements Iterator<String> {
private Iterator<?> i1;
private Iterator<?> i2;
private String value;
IteratorWrapper(Iterator<?> iterator) {
this.i1 = iterator;
this.i2 = Collections.emptyIterator();
}
private IteratorWrapper(Iterator<?> i1, Iterator<?> i2) {
this.i1 = i1;
this.i2 = i2;
}
@Override
public boolean hasNext() {
if (value != null)
return true;
while (i1.hasNext()) {
Object v = i1.next();
if (v instanceof String) {
value = v.toString();
return true;
} else if (v instanceof Iterator) {
i1 = new IteratorWrapper((Iterator<?>) v, i1);
} else
throw new IllegalArgumentException("I don't know what it's");
}
while (i2.hasNext()) {
Object v = i2.next();
if (v instanceof String) {
value = v.toString();
return true;
} else if (v instanceof Iterator) {
i2 = new IteratorWrapper((Iterator<?>) v, i2);
} else
throw new IllegalArgumentException("I don't know what it's");
}
return false;
}
@Override
public String next() {
String result = this.value;
this.value = null;
return result;
}
}
public class Solution {
public static void main(String[] args) {
Iterator iterator = Arrays.asList(
Arrays.asList("1", "2", Arrays.asList("3").iterator()).iterator(),
"4", "5",
Arrays.asList(Arrays.asList("6", Arrays.asList("7", "8").iterator()).iterator(), "9").iterator()
).iterator();
IteratorWrapper wrapper = new IteratorWrapper(iterator);
while (wrapper.hasNext())
System.out.println(wrapper.next());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment