java 压缩流_使用JDK 8和lambda压缩流(java.util.Streams.zip)

我也需要这个,所以我把b93的源代码放到了一个“util”类中。为了使用当前的API,我不得不稍微修改它。

作为参考,以下是工作代码(冒着自己的风险.):public static Stream 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 aIterator = Spliterators.iterator(aSpliterator);

Iterator bIterator = Spliterators.iterator(bSpliterator);

Iterator cIterator = new Iterator() {

@Override

public boolean hasNext() {

return aIterator.hasNext() && bIterator.hasNext();

}

@Override

public C next() {

return zipper.apply(aIterator.next(), bIterator.next());

}

};

Spliterator split = Spliterators.spliterator(cIterator, zipSize, characteristics);

return (a.isParallel() || b.isParallel())

? StreamSupport.stream(split, true)

: StreamSupport.stream(split, false);}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值