Iterable.forEach(消费者)

时间:2015-11-12 19:05:23

标签: java foreach

我试图理解为什么下面的代码段没有按预期工作。我怀疑它是因为Integer类的不变性,但它并不完全清楚。你能解释一下吗?

    List<Integer> a1 = Arrays.asList(1, 2, 4);
    a1.forEach(integer -> integer += 10);

2 个答案:

答案 0 :(得分:8)

使用此:

a1.replaceAll(integer -> integer + 10);

Integer个对象是不可变的。 integer += 10表示

integer = Integer.valueOf(integer.intValue() + 10);

由于integer是局部变量,因此当Consumer返回时,结果将被丢弃。

答案 1 :(得分:0)

您的代码与此非常相似:

for (int i = 0; i<a1.size(); i++){
    int integer = a1.get(i);
    integer = integer + 10;
}

仅仅因为您更新了局部变量integer的值(它包含列表中的当前元素),它并不意味着您更新了列表本身的值。

您也可以将其视为

int a = 10; 
int b = a;
b = 20;

仅因为我们更改了b的值,它并不意味着我们也更改了a的值。

如果您正在寻找根据某些功能更新列表中所有值的方法,请使用添加为pointed by ericksonreplaceAll方法。