Lit*_*iot 1 java java-8 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++;});
Run Code Online (Sandbox Code Playgroud)
现在这会导致编译时错误:从 lambda 表达式引用的局部变量必须是最终的或有效的最终变量。
是否有任何解决方法来更新流中的局部变量?因为让它成为最终意味着那是不可能的
long oneFreq = Arrays.stream(arr).filter(x->x==1).count();
Run Code Online (Sandbox Code Playgroud)
或者您可以使用AtomicInteger使用forEach增加计数
AtomicInteger atomicInt = new AtomicInteger(0);
Arrays.stream(arr).filter(x->x==1).forEach(i->atomicInt.incrementAndGet());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |