Java mapa de flujo modifica clase de objeto personalizado no construido en clases

Gagandeep Singh:
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;
    }
}

Dentro principal:

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]

¿Cuál es la razón de este comportamiento? Cuando se cambia el valor del objeto Empleado el valor se actualiza en el ArrayList original, pero cuando ArrayList de cadena fue cambiado los valores no reflejaba en el ArrayList originales.

Eran :

Hay una diferente entre e.name+="CHANGE"y s->s+="CHANGE". Ambos crear una nueva Stringinstancia, pero mientras los primeros cesionarios ese nuevo Stringa una variable de instancia de una instancia de la Employeeclase (y, por tanto, que muta ejemplo), las segundas lo asigna a un local de Stringla variable.

Por lo tanto e.name+="CHANGE"cambia la instancia correspondiente del original Listy s->s+="CHANGE"no lo hace.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=189188&siteId=1
Recomendado
Clasificación