Created
July 30, 2021 21:56
-
-
Save oowekyala/1a5d387eb5d035fc6c52921076690654 to your computer and use it in GitHub Desktop.
An unmodifiable set of 2 elements, with predictable iteration order.
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.*; | |
/** | |
* A set of 2 elements. Unfortunately, {@link Set#of(Object, Object)} | |
* does not guarantee stable iteration order across JVM | |
* instances. | |
*/ | |
public final class Set2<T> extends AbstractSet<T> { | |
private final T e0; | |
private final T e1; | |
Set2(T e0, T e1) { | |
this.e0 = Objects.requireNonNull(e0); | |
this.e1 = Objects.requireNonNull(e1); | |
} | |
@Override | |
public Iterator<T> iterator() { | |
return new Iterator<T>() { | |
int idx = 0; | |
@Override | |
public boolean hasNext() { | |
return idx < 2; | |
} | |
@Override | |
public T next() { | |
switch (idx++) { | |
case 0: return e0; | |
case 1: return e1; | |
default: | |
throw new NoSuchElementException(); | |
} | |
} | |
}; | |
} | |
@Override | |
public int size() { | |
return 2; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment