Java8リリースされました!
けど、ちょっと足りない。
zipメソッドは一瞬Java8の開発ビルドに入っていましたが、JavaOneのときには外れていました。JavaOneでzipはどうなるの?という質問にもBrianは、ちょっと難しかったからはずしたというようなことを言っていました。
とはいえ、Java8に正式に含まれる品質じゃなくていいから欲しい。
あと、zipならPairも欲しい。
ということで、とりあえず置いておきます。
public class Pair<T, U> { T left; U right; public Pair(T left, U right) { this.left = left; this.right = right; } public static <M, N> Pair<M, N> of(M left, N right){ return new Pair<>(left, right); } public<R> R reduce(BiFunction<T, U, R> func){ return func.apply(left, right); } public<M, N> Pair<M, N> map(Function<T, M> lfunc, Function<U, N> rfunc){ return of(lfunc.apply(left), rfunc.apply(right)); } }
public static <T, U> Stream<Pair<T,U>> zip(Stream<T> f, Stream<U> s){ Iterator<T> fite = f.iterator(); Iterator<U> site = s.iterator(); Iterator<Pair<T, U>> iterator = new Iterator<Pair<T, U>>(){ @Override public boolean hasNext() { return fite.hasNext() && site.hasNext(); } @Override public Pair<T, U> next() { return Pair.of(fite.next(), site.next()); } }; return StreamSupport.stream( Spliterators.spliteratorUnknownSize( iterator, Spliterator.NONNULL | Spliterator.ORDERED), false); }