Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

200
Views
.mapa y mutación del contenido del objeto original

Considere este código

 List<Employee> employees = new ArrayList<Employee>(); employees.add(new Employee("A", "B")); employees.add(new Employee("A1", "B1")); employees.stream().map(e-> { e.setfName("Mr. " + e.getfName()); return e; }); // 1. DOES NOT mutate employees' content employees.stream().map(e-> { e.setfName("Mr. " + e.getfName()); return e; }).collect(Collectors.toList()); // 2. DOES mutate employees' content employees.stream().map(e-> new Employee ("Mrs. " + e.getfName(), e.getlName())).collect(Collectors.toList()); // 3. DOES NOT put new objects in original list

No estoy seguro si entiendo la razón de este comportamiento. Si la transmisión crea una memoria separada, ¿no debería 2 NO mutar el contenido de la lista original?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

employees.stream().map(e-> { e.setfName("Mr. " + e.getfName()); return e; }); // 1. DOES NOT mutate employees' content

La línea 1 solo no muta el contenido de los empleados porque no hace nada en absoluto. Los flujos no se evalúan hasta que se llama a una operación de terminal.

La línea 2 crea una nueva lista para contener los empleados actualizados, pero los empleados originales están actualizados, por lo que tiene dos listas modificables de forma independiente que contienen exactamente los mismos empleados con exactamente los mismos datos donde no puede modificar uno sin el otro. Entonces, con el resultado de la línea 2, podría add nuevos objetos Employee y no modificar employees , pero no podría modificar los empleados en esa List sin modificar también los originales (porque son los mismos empleados).

Solo la Línea 3 crea nuevos objetos Employee que existen independientemente de los originales.

over 4 years ago · Santiago Trujillo Report

0

Una cosa importante que hay que entender acerca de los streams es que son perezosos . Si map los valores, la función de asignación solo se llama cuando recupera valores de la secuencia. collect un flujo es una forma de usar los valores y forzar las mutaciones, razón por la cual el segundo ejemplo muta la lista y el primero no. El tercer ejemplo no muta los objetos en su lugar, sino que crea un nuevo Employee para cada uno, por lo que crea una nueva lista clonada que no está relacionada con la lista original.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!