java - 如何更新 Stream 中的局部原始变量?(爪哇)
问题描述
我正在编写一个代码,其中我需要计算数组中 1 的数量,现在我可以通过循环遍历数组来以旧方式完成,但我想知道如何使用 Streams 来完成。
int[] arr = {1,2,4,1,5,1}; //example array
int oneFreq = 0;
Arrays.stream(arr).forEach(x - > {if(x==1) oneFreq++;});
现在这给出了编译时错误:从 lambda 表达式引用的局部变量必须是最终的或有效的最终的。
是否有任何解决方法来更新流中的局部变量?因为让它最终意味着那是不可能的
解决方案
long oneFreq = Arrays.stream(arr).filter(x->x==1).count();
或者您可以使用AtomicInteger来增加使用forEach的计数
AtomicInteger atomicInt = new AtomicInteger(0);
Arrays.stream(arr).filter(x->x==1).forEach(i->atomicInt.incrementAndGet());
推荐阅读
- performance - 如何在基准测试中击败 Go 优化器?
- actions-on-google - 如何在 Google Actions Trivia 游戏中从一个级别移动到另一个级别?
- rest - 如何在 React Native 中呈现从 REST API 获取的信息?
- java - 构建电子邮件并将其发送出去
- sql-server - 同样的 SQL 请求,CockroachDB 需要 4 分钟 SQL Server 需要 35 毫秒。我错过了什么吗?
- ag-grid - 在 redux 操作后,ag-grid 将 rowStyle 刷新为默认值
- tensorflow - 在 tensorflow 模型验证中,函数指标是如何按批次聚合的?
- wordpress - 使用 All-inOne WP Migration 我无法导入文件,太大 (137 MB) 我无法增加可接受的文件大小
- robots.txt - 禁止 Robots.txt 上的动态页面
- c++ - 显示奇数的函数