gpt4 book ai didi

Java流图修改未内置类的自定义类对象

转载 作者:搜寻专家 更新时间:2023-11-01 02:35:58 24 4
gpt4 key购买 nike

class Employee {

public String name;
public Integer age;
public Employee(String n, int age) {
this.name = n;
this.age = age;
}
public String toString() {
return this.name+":"+this.age;
}
}

内部主要:

ArrayList<Employee> list = new ArrayList<>();
list.add(new Employee("NameA", 10));
list.add(new Employee("NameB", 25));
list.add(new Employee("NameC", 30));
list.add(new Employee("NameD", 45));
list.add(new Employee("NameE", 50));

System.out.println(list);//[NameA:10, NameB:25, NameC:30, NameD:45, NameE:50]

list.stream().filter(e->e.age%10==0).map(e->e.name+="CHANGE").collect(Collectors.toList());

System.out.println(list); //[NameACHANGE:10, NameB:25, NameCCHANGE:30, NameD:45, NameECHANGE:50]


ArrayList<String> strList = new ArrayList<>();
strList.add("1");
strList.add("2");
strList.add("3");
strList.add("4");
strList.add("5");

System.out.println(strList);//[1, 2, 3, 4, 5]

List<String> updatedStrList = strList.stream().map(s->s+="CHANGE").collect(Collectors.toList());

System.out.println(updatedStrList);//[1CHANGE, 2CHANGE, 3CHANGE, 4CHANGE, 5CHANGE]

System.out.println(strList);//[1, 2, 3, 4, 5]

这种行为的原因是什么?当更改 Employee 对象的值时,原始 ArrayList 中的值会更新,但是当更改 String 的 ArrayList 时,值不会反射(reflect)在原始 ArrayList 中。

最佳答案

e.name+="CHANGE"s->s+="CHANGE" 是有区别的。它们都创建了一个新的 String 实例,但是第一个将新的 String 分配给 Employee 类实例的实例变量(因此改变了那个实例),第二个将它分配给本地 String 变量。

因此e.name+="CHANGE"改变了原始List的对应实例而s->s+="CHANGE"没有't.

关于Java流图修改未内置类的自定义类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52531181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com