我一直在玩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);
}
但据我所知,没有这样的功能。
任何人都知道如何实现这个?或者也许这是不可能的?
在旁注中,实现的潜在问题可能是其他人可能访问流并从中推送值。有没有办法“告诉”他们消耗的溪流,以便没有其他人可以触摸他们,虽然他们还没有被消费?