gpt4 book ai didi

java - 根据之前的计算结果停止java流计算

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:13 25 4
gpt4 key购买 nike

如何中断基于先前结果的流计算?如果 stream.filter(...).count() 明显小于某个数字 - 如何停止流计算?

我有以下代码检查某些 sampleData 是否通过了 predicate 测试:

// sampleData.size() may be greater than 10.000.000
Set<String> sampleData = downloadFromWeb();
return sampleData.stream().filter(predicate::test).count() > sampleData.size() * coefficient;

我可以有数千个sampleData。问题是这段代码是无效的。例如,如果 coefficient 等于 0.5sampleData.size() = 10_000_000,并且第一个 5_000_000 元素失败predicate::test - 没有理由验证最后的 5_000_000 元素(count() 永远不会大于 5_000_000).

最佳答案

ZhekaKozlov’s answer正朝着正确的方向前进,但缺乏否定。对于大于某个阈值的匹配,非匹配元素的数量必须小于“size - threshold”。如果我们测试不匹配的元素是否变小,我们可以应用 limit 在它们变大时停止:

Set<String> sampleData = downloadFromWeb();
final long threshold = sampleData.size()-(long)(sampleData.size() * coefficient);
return sampleData.stream()
.filter(predicate.negate()).limit(threshold+1).count() < threshold;

顺便说一句,没有理由像 predicate::test 一样创建对现有 Predicate 测试方法的方法引用。只需将 Predicate 传递给 filter 方法。上面的代码还使用了 predicate.negate() 而不是 predicate.negate()::test...

关于java - 根据之前的计算结果停止java流计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46173577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com