Browse Source

Merge pull request #636 from CGNonofr/fix-composite-iterable

Fix CompositeIterable
master
Nikita Koksharov 6 years ago
committed by GitHub
parent
commit
ea1787f336
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 34
      src/main/java/com/corundumstudio/socketio/misc/CompositeIterable.java
  2. 40
      src/main/java/com/corundumstudio/socketio/misc/CompositeIterator.java

34
src/main/java/com/corundumstudio/socketio/misc/CompositeIterable.java

@ -19,14 +19,11 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class CompositeIterable<T> implements Iterable<T>, Iterator<T> {
public class CompositeIterable<T> implements Iterable<T> {
private List<Iterable<T>> iterablesList;
private Iterable<T>[] iterables;
private Iterator<Iterator<T>> listIterator;
private Iterator<T> currentIterator;
public CompositeIterable(List<Iterable<T>> iterables) {
this.iterablesList = iterables;
}
@ -52,35 +49,8 @@ public class CompositeIterable<T> implements Iterable<T>, Iterator<T> {
iterators.add(iterable.iterator());
}
}
listIterator = iterators.iterator();
currentIterator = null;
return this;
}
@Override
public boolean hasNext() {
if (currentIterator == null || !currentIterator.hasNext()) {
while (listIterator.hasNext()) {
Iterator<T> iterator = listIterator.next();
if (iterator.hasNext()) {
currentIterator = iterator;
return true;
}
}
return false;
}
return currentIterator.hasNext();
return new CompositeIterator<T>(iterators.iterator());
}
@Override
public T next() {
hasNext();
return currentIterator.next();
}
@Override
public void remove() {
currentIterator.remove();
}
}

40
src/main/java/com/corundumstudio/socketio/misc/CompositeIterator.java

@ -0,0 +1,40 @@
package com.corundumstudio.socketio.misc;
import java.util.Iterator;
public class CompositeIterator<T> implements Iterator<T> {
private Iterator<Iterator<T>> listIterator;
private Iterator<T> currentIterator;
public CompositeIterator(Iterator<Iterator<T>> listIterator) {
this.currentIterator = null;
this.listIterator = listIterator;
}
@Override
public boolean hasNext() {
if (currentIterator == null || !currentIterator.hasNext()) {
while (listIterator.hasNext()) {
Iterator<T> iterator = listIterator.next();
if (iterator.hasNext()) {
currentIterator = iterator;
return true;
}
}
return false;
}
return currentIterator.hasNext();
}
@Override
public T next() {
hasNext();
return currentIterator.next();
}
@Override
public void remove() {
currentIterator.remove();
}
}
Loading…
Cancel
Save