如何利用java8给List对象中的每一个字段赋值

在Java 8中,你可以使用流(Stream)API来给List中的对象的某个字段赋值。这里是一个简单的例子:

peek方法:

假设你有一个Person类,其中有一个字段叫做name,你想要给所有人的名字前添加一个前缀"Mr. ":

public class Person {  
    private String name;  
  
    // getters and setters  
    public String getName() { return name; }  
    public void setName(String name) { this.name = name; }  
}

你可以使用以下代码给所有人的名字添加前缀:

List<Person> people = //... your list of people;  
  
List<Person> updatedPeople = people.stream()  
    .peek(person -> person.setName("Mr. " + person.getName()))  
    .collect(Collectors.toList());

在这个例子中,peek方法接受一个函数作为参数,这个函数会应用到流中的每一个元素上。在这个函数中,我们使用lambda表达式来给每个人的名字添加前缀。然后,我们使用collect方法将修改后的流转换回List。

如果你想要给多个字段赋值,你可以在peek方法中添加更多的lambda表达式。例如,如果你想要给每个人的名字和年龄都添加前缀,你可以这样做:

List<Person> people = //... your list of people;  
  
List<Person> updatedPeople = people.stream()  
    .peek(person -> {  
        person.setName("Mr. " + person.getName());  
        person.setAge("Age " + person.getAge());  
    })  
    .collect(Collectors.toList());

注意,peek方法并不会修改原始的List,而是返回一个新的、修改后的List。如果你想要修改原始的List,你需要使用其他的流操作,比如forEach或者map

map方法:

使用map方法也可以实现类似的功能,但是你需要创建一个新的Person对象来替换原始对象。下面是一个使用map方法的例子:

List<Person> people = //... your list of people;  
  
List<Person> updatedPeople = people.stream()  
    .map(person -> {  
        Person updatedPerson = new Person();  
        updatedPerson.setName("Mr. " + person.getName());  
        updatedPerson.setAge("Age " + person.getAge());  
        return updatedPerson;  
    })  
    .collect(Collectors.toList());

在这个例子中,我们使用map方法将原始的Person对象转换为一个新的Person对象,其中包含修改后的字段值。请注意,使用map方法会创建一个新的List,因为它不会修改原始的List。