indicesArrays.stream().flatMap(n -> n.indices).sorted().filter(x->
//filter x if its difference with its predecessor is less then 5;
)
是否有一种“自然”的方式来对流进行这种依赖过滤?你会怎样做才是正确的?
这就是我会尝试的方法:
indicesArrays.stream().flatMap(n -> n.indices).sorted().filter(new Predicate<Integer>() {
Integer lastX = null;
@Override
public boolean test(Integer t) {
if (lastX == null) {
lastX = t;
return true;
}
final boolean include = t - lastX >= 5;
lastX = t;
return include;
}
});
但我不确定这是否是一个好方法,也不确定它总是有效......
最佳答案
在您的特定情况下以及当时最新的 openjdk 版本(jdk+b132),这将起作用,但不建议这样做。因为你的indexArrays
很可能是Collection<SomeClassWithABoxedIntStreamField>
,其stream()
方法返回一个顺序流,那么就不会产生干扰。
但是,如果 indexArrays.stream()
返回一个并行流,您首先必须使用 Stream::sequential
将其转换为顺序流。处理该流可能会得到正确的结果。
无论如何,这种代码确实不推荐,并且可能与 future 的Java版本不兼容,它也违反了约定。
PS:看看IntStream
和Stream::flatMapToInt
。他们可以消除装箱和拆箱整数值的成本。
关于java - 状态依赖过滤流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37583804/