首页javalambdaJava Stream - 如何在Lambda中使用有效的最终对象局部变量

Java Stream - 如何在Lambda中使用有效的最终对象局部变量

我们想知道如何在Lambda中使用有效的最终对象局部变量。
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class Main {
  public static void main(String[] args) {
    List<Integer> l = Arrays.asList(1, 3, 2, 4, 7, 8, 9, 6, 5);
    IntWrapper variableOutside = new IntWrapper(50);
    Consumer<Integer> consumer = i -> {
      int variableInside = 70;
      System.out.println(variableOutside.getInt());
      variableOutside.incr(); // Imagine multi-thread environment calling this
      variableInside++;
      System.out.printf("%s plus %d plus %d equals %d\n", variableOutside,
          variableInside, i, variableOutside.getInt() + variableInside + i);
    };
    variableOutside.incr(); // Now it's the variableOutside starts from 51
    l.forEach(consumer);
  }
}
class IntWrapper {
  private int data;

  public IntWrapper(int i) {
    this.data = i;
  }

  public String toString() {
    return this.data + "";
  }

  public void incr() {
    this.data++;
  }

  public int getInt() {
    return this.data;
  }
}