Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

192
Vistas
.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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda