首页 > 解决方案 > 如何更新 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 表达式引用的局部变量必须是最终的或有效的最终的。

是否有任何解决方法来更新流中的局部变量?因为让它最终意味着那是不可能的

标签: javajava-8java-stream

解决方案


您可以直接在流上使用计数过滤器

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());

推荐阅读