栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用带有Lambda的JDK8压缩流(java.util.stream.Streams.zip)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用带有Lambda的JDK8压缩流(java.util.stream.Streams.zip)

我也需要它,因此我只是从b93中获取了源代码并将其放在“ util”类中。我必须对其稍作修改以使用当前的API。

供参考,以下是工作代码(风险自负…):

public static<A, B, C> Stream<C> zip(Stream<? extends A> a,    Stream<? extends B> b,    BiFunction<? super A, ? super B, ? extends C> zipper) {    Objects.requireNonNull(zipper);    Spliterator<? extends A> aSpliterator = Objects.requireNonNull(a).spliterator();    Spliterator<? extends B> bSpliterator = Objects.requireNonNull(b).spliterator();    // Zipping looses DISTINCT and SORTED characteristics    int characteristics = aSpliterator.characteristics() & bSpliterator.characteristics() & ~(Spliterator.DISTINCT | Spliterator.SORTED);    long zipSize = ((characteristics & Spliterator.SIZED) != 0) ? Math.min(aSpliterator.getExactSizeIfKnown(), bSpliterator.getExactSizeIfKnown()) : -1;    Iterator<A> aIterator = Spliterators.iterator(aSpliterator);    Iterator<B> bIterator = Spliterators.iterator(bSpliterator);    Iterator<C> cIterator = new Iterator<C>() {        @Override        public boolean hasNext() { return aIterator.hasNext() && bIterator.hasNext();        }        @Override        public C next() { return zipper.apply(aIterator.next(), bIterator.next());        }    };    Spliterator<C> split = Spliterators.spliterator(cIterator, zipSize, characteristics);    return (a.isParallel() || b.isParallel())? StreamSupport.stream(split, true): StreamSupport.stream(split, false);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498048.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号