如何在java 8中压缩流?

时间:2014-07-06 00:44:41

标签: java java-8 java-stream

我一直在玩java 8,我没有设法写一个函数zipWith(取自haskell):

zipWith接受两个流和一个双功能,并返回一个流,该流由成对应用于双功能的流元素组成。 类型签名:

<K,J,T> Stream<T> zipWith(Stream<K> s1, Stream<J> s2, BiFunction<K,J,T> f)

例如,(让我们使用数组代替流来澄清),假设函数add,嗯,添加:

zipWith({1  ,2  ,3},
        {9  ,4  ,6},add) = 
        {1+9,2+4,3+6} = {10,6,9}

我没有找到任何方法来实现此功能。当然,它应该懒惰地进行,根据需要计算元素,因为这是流的整个目的。

如果有任何方法可以从流中弹出一个值,我可以这样实现这个功能:

public<K,J,T> Stream<T> zipWith(Stream<K> s1, Stream<J> s2, BiFunction<K,J,T> f)
{
    Function<K,T> newf = (x) -> f.apply(x, s2.pop());
    return s1.map(newf);
}

但据我所知,没有这样的功能。

任何人都知道如何实现这个?或者也许这是不可能的?

在旁注中,实现的潜在问题可能是其他人可能访问流并从中推送值。有没有办法“告诉”他们消耗的溪流,以便没有其他人可以触摸他们,虽然他们还没有被消费?

0 个答案:

没有答案