例如,我想要这样的东西:
delayed(f(x))
我想避免做类似的事情:
n = {1, 2, 3, 4, 5}
m = {1, 2, 3, 4, 5}
x = Arrays.stream(n);
y = Arrays.stream(n);
IntStream.multiply(x,y) // int stream now containing squares
(仅为索引创建int流)。
答案 0 :(得分:1)
有可能,但是我很难想象这种情况值得。我们在产品上构造一个迭代器,将其转换为拆分器,然后转换为流。
int[] n = {1, 2, 3, 4, 5};
int[] m = {1, 2, 3, 4, 5};
IntStream x = Arrays.stream(n);
IntStream y = Arrays.stream(m);
PrimitiveIterator.OfInt nIt = x.iterator();
PrimitiveIterator.OfInt mIt = y.iterator();
Iterator<Integer> prodIterator = new Iterator<>() {
@Override
public boolean hasNext() {
return nIt.hasNext() && mIt.hasNext();
}
@Override
public Integer next() {
// Apply your BiFunction here
return nIt.next() * mIt.nextInt();
}
};
Iterable<Integer> prodIterable = () -> prodIterator;
Stream<Integer> productStream = StreamSupport.stream(prodIterable.spliterator(), false);
productStream.forEach(System.out::println);
输出:
1 4 9 16 25
如果您想使用IntStream
,我相信您可以自己将Stream<Integer>
拆箱。
请注意,如果原始流中元素的数量不同,则较长流中的多余元素将被默认忽略,这可能不是您想要的。请想些更好的东西。