Filtrado y Transformación de Objetos con Lambdas en Java
Este programa crea una lista de objetos de la clase City, que representa una ciudad con dos atributos: name y people (cantidad de personas). Posteriormente, el programa filtra y transforma estos objetos usando métodos de orden superior y expresiones lambda.
Los métodos principales empleados en este programa son:
- removeIf(): Elimina los elementos de la lista que cumplen con una condición dada.
- replaceAll(): Reemplaza cada elemento de la lista con el resultado de aplicar una función a ese elemento.
- forEach(): Recorre cada elemento de la lista y ejecuta una acción, como imprimir.
La clase City contiene atributos para el nombre de la ciudad y el número de habitantes. Además de los métodos de
establecimiento y obtención de estos valores, también define un método toString()
para representar la
información de cada ciudad en un formato legible.
class City {
String name;
long people;
public City(String name, long people) {
this.name = name;
this.people = people;
}
public String getName() {
return this.name;
}
public long getPeople() {
return this.people;
}
public void setName(String name) {
this.name = name;
}
public void setPeople(long people) {
this.people = people;
}
public String toString() {
return "{name: \"" + this.name + "\", people: " + this.people + "}";
}
}
En la clase Main, se inicializa una lista llamada cityTour
con tres ciudades: Gotham, Metropolis y
Hogsmade, cada una con un número específico de habitantes. A continuación, se realizan dos operaciones principales:
- Filtrado con removeIf(): Se eliminan de la lista las ciudades con menos de 1000 habitantes usando una expresión lambda como condición de filtro.
-
Transformación con replaceAll(): Se actualiza el nombre de cada ciudad en la lista eliminando cualquier parte que
esté entre paréntesis. Esta transformación también se realiza con una expresión lambda que crea una nueva instancia
de
City
sin la descripción entre paréntesis en el nombre.
Finalmente, se utiliza forEach()
para imprimir cada ciudad en la lista transformada.
import java.util.*;
public class Main {
public static void main(String[] args) {
List<City> cityTour = new ArrayList<>();
City g = new City("Gotham (cathedral)", 8000);
City m = new City("Metropolis (peaceful garden)", 16000);
City h = new City("Hogsmade (shopping street)", 124);
Collections.addAll(cityTour, g, m, h);
cityTour.removeIf(city -> city.getPeople() <= 1000);
cityTour.replaceAll(
city -> new City(
city.getName().replaceAll("\\s*\\(.*\\)$", ""),
city.getPeople()
)
);
cityTour.forEach(System.out::println);
}
}
La salida de este programa muestra los nombres de las ciudades sin las descripciones y solo aquellas que tienen más de 1000 habitantes. Dado el ejemplo, la ciudad "Hogsmade" será eliminada, y se imprimirán las otras dos ciudades:
{name: "Gotham", people: 8000}
{name: "Metropolis", people: 16000}
Este ejemplo muestra el uso de métodos de orden superior en Java para manipular una colección de objetos de forma concisa y expresiva. removeIf() y replaceAll() permiten filtrar y transformar los datos, mientras que forEach() facilita la visualización de los resultados.