![](/img/trans.png)
[英]How to properly do nested iteration w/ Java 8 features such as stream, forEach etc?
[英]Java Stream with ForEach iteration issue
我有兩種處理類型的實現。 不確定為什么stream forEach循環會抱怨變量'i'必須是最終變量。 但是如果是最終的,那么如何解決計算“ i”的邏輯問題?
public static void main(String[] args) {
String str = "123456789";
int i = 0;
//Non Stream
for (char c : str.toCharArray()) {
if (c >= 48 && c <= 57) {
i = i * 10 + (c - 48);
}
}
System.out.println(i);
i = 0;
// WHY compiler fails for variable 'i' here?
str.chars().forEach((c) -> {
if (c >= 48 && c <= 57) {
i = i * 10 + (c - 48);
}
});
System.out.println(i);
}
您可以替換forEach
有減少 。 例如:
int i = str.chars()
.filter( c -> c >= 48 && c <= 57 )
.reduce( 0, (a, b) -> a * 10 + (b - 48) );
此處, 0
為初始值,lambda表達式計算新值。 a
是最新計算的結果, b
是流中的下一個元素。 有效地,不是使用局部變量來跟蹤(累加)最新的計算,而是將累加器維護在減速器內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.