Skip to content

Instantly share code, notes, and snippets.

@dha-lo-jd
Created April 9, 2014 08:32
Show Gist options
  • Save dha-lo-jd/10241709 to your computer and use it in GitHub Desktop.
Save dha-lo-jd/10241709 to your computer and use it in GitHub Desktop.
車輪の再発明(確信)
import java.util.Iterator;
import lombok.Value;
public class PairCollectionSupport {
@Value
public static class Pair<A, B> {
private A a;
private B b;
}
@Value(staticConstructor = "of")
public static class PairCollection<A, B> implements Iterable<Pair<? extends A, ? extends B>> {
private class IteratorImpl implements Iterator<Pair<? extends A, ? extends B>> {
private Iterator<? extends A> asIterator;
private Iterator<? extends B> bsIterator;
@Override
public boolean hasNext() {
boolean hasNextA = asIterator.hasNext();
boolean hasNextB = bsIterator.hasNext();
boolean hasDiff = hasNextA != hasNextB;
if (hasDiff && !ignoreOveredLength) {
throw new ArrayIndexOutOfBoundsException(String.format("different length iterators."));
}
return asIterator.hasNext() && bsIterator.hasNext();
}
@Override
public Pair<? extends A, ? extends B> next() {
return new Pair<>(asIterator.next(), bsIterator.next());
}
@Override
public void remove() {
asIterator.remove();
bsIterator.remove();
}
}
private Iterable<? extends A> as;
private Iterable<? extends B> bs;
private boolean ignoreOveredLength;
public PairCollection(Iterable<? extends A> as, Iterable<? extends B> bs) {
this(as, bs, true);
}
public PairCollection(Iterable<? extends A> as, Iterable<? extends B> bs, boolean ignoreOveredLength) {
super();
this.as = as;
this.bs = bs;
this.ignoreOveredLength = ignoreOveredLength;
}
@Override
public Iterator<Pair<? extends A, ? extends B>> iterator() {
return new IteratorImpl();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment