Java Stream 相当于 ReactiveX Observable#scan

标签 java list rx-java java-stream

ReactiveX 有一个非常简洁的运算符,名为 Scan ,这类似于reduce,只不过它发出每个中间累加器。

我如何使用 Java Streams 来实现这一点? Stream#reduce不是我想要的,因为它返回 T :

T reduce(T identity, BinaryOperator<T> accumulator)

我想要的是返回Stream<T> ,流的每一项都是 T每次调用 accumulator 时都会返回该值:

Stream.of(1, 2, 3)
    .myScan(0, (accumulator, i) -> accumulator + i)
    .collect(Collectors.toList()); // [1, 3, 6]

我可以做一些蹩脚的事情,比如减少 List ,然后转换回 Stream ,但这很难看。

最佳答案

尝试StreamEx 。我认为它提供了你想要的提取API:

List<Integer> result = StreamEx.of(1, 2, 3).scanLeft((i, j) -> i + j);
System.out.println(result); // [1, 3, 6]

关于Java Stream 相当于 ReactiveX Observable#scan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936854/

相关文章:

java - 向 Servlet 发出 AJAX POST 请求失败

java - 当两个条件对象分配给锁定对象时发生死锁

java - Operator switchMap() 没有取消订阅之前的请求

java - 智能转换为 'ObserverT!!' 是不可能的,因为 'item.get()' 是一个复杂的表达式

java - 使用 RxJava fork 任务并合并结果

java - 带符号字节的按位与运算

java - Java 初学者使用 JUnit 测试 ArrayList 大小

python - 将来自 stdin 的整数放入列表中

python - 对内部包含列表的列表进行二值化

python - 从数组中获取第一个前一个不匹配的元素