Java 使用 forEach 修改值

在Java中,我们经常需要遍历集合或数组,并对其中的元素进行一些操作。使用传统的for循环可以实现这个功能,但是代码比较冗长。为了简化代码,并提高可读性,Java 8引入了一个新的方法——forEach。forEach方法是一个终端操作,它接收一个Lambda表达式作为参数,用于对集合中的每个元素进行操作。

forEach方法的语法

forEach方法的语法如下所示:

void forEach(Consumer<? super T> action)

其中,action表示对每个元素进行的操作,它是一个Consumer类型的函数式接口。Consumer接口包含一个抽象方法accept,用于接收一个参数并执行某些操作,没有返回值。

使用forEach修改值的示例

下面我们通过一个示例来演示如何使用forEach方法修改集合中的元素。

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);
        
        numbers.forEach(num -> {
            num = num * 2; // 修改每个元素的值
        });
        
        numbers.forEach(System.out::println); // 输出修改后的元素
    }
}

在上面的代码中,我们创建了一个Integer类型的List,并添加了几个元素。然后我们使用forEach方法遍历集合中的每个元素,并将每个元素的值乘以2。最后,我们使用forEach方法再次遍历集合,并输出修改后的元素。

执行上述代码,输出结果为:

1
2
3
4
5

可以看到,集合中的元素并没有被修改,依然保持原来的值。这是因为在Lambda表达式中,num只是一个临时变量,修改它的值并不会改变集合中对应元素的值。

使用forEach修改值的正确方式

要想使用forEach方法修改集合中的元素,我们需要借助其他方式,比如使用List的set方法或使用一个可变的包装类等。下面我们通过一个示例来演示如何正确地使用forEach方法修改集合中的元素。

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);
        
        List<Integer> newNumbers = new ArrayList<>();
        numbers.forEach(num -> {
            newNumbers.add(num * 2); // 修改每个元素的值并添加到newNumbers集合中
        });
        
        newNumbers.forEach(System.out::println); // 输出修改后的元素
    }
}

在上面的代码中,我们创建了一个新的List对象newNumbers,然后使用forEach方法遍历集合中的每个元素,并将每个元素的值乘以2,并添加到newNumbers集合中。最后,我们使用forEach方法输出newNumbers集合中的元素。

执行上述代码,输出结果为:

2
4
6
8
10

可以看到,集合中的每个元素都被正确地修改了,并且添加到了newNumbers集合中。

总结

使用forEach方法可以简化对集合中元素的遍历和操作。但需要注意的是,在Lambda表达式中对元素值的修改并不会改变集合中对应元素的值。如果需要修改集合中的元素值,我们可以借助其他方式,比如使用List的set方法或使用一个可变的包装类等。通过合理的使用forEach方法,可以提高代码的可读性和简洁性,提升编程效率。