簡體   English   中英

Java Stream與ForEach迭代問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM