如何更新Stream内的局部原始变量?(爪哇)

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 表达式引用的局部变量必须是最终的或有效的最终变量。

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

Dea*_*ool 7

您可以直接在上使用带有过滤器的计数

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)

  • @Little_idiot Java 提供循环和流,并允许您选择更简洁的解决方案,所以不要抱怨另一个解决方案的冗长...... (3认同)