Created
April 9, 2014 08:32
-
-
Save dha-lo-jd/10241709 to your computer and use it in GitHub Desktop.
車輪の再発明(確信)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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