tutorial propiedades personalizados example español ejemplo beans java compare javabeans

propiedades - Comparación de JavaBeans



javabeans tutorial español (2)

¿Alguien sabe acerca de una biblioteca de fuente abierta gratuita (clase de utilidad) que le permite comparar dos instancias de un bean Java y devolver una lista / matriz de propiedades cuyos valores son diferentes en esas dos instancias? Por favor, publique una pequeña muestra.

Aclamaciones
Tomás


BeanComparator of Apache commons es lo que estás buscando.

Actualización . Un ejemplo simple que compara JavaBeans con una propiedad (la comparación se realiza en una sola propiedad, debe crear tantos BeanComparators como las propiedades que quiera emparejar).

import org.apache.commons.beanutils.BeanComparator; public class TestBeanComparator { public TestBeanComparator() { } public class TestBean { int value; public TestBean() { } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } public static void main(String[] args) { TestBeanComparator tbc = new TestBeanComparator(); tbc.go(); } public void go() { TestBean tbs [] = new TestBean[10]; for (int i = 0; i < tbs.length; i++) { tbs[i] = new TestBeanComparator.TestBean(); tbs[i].setValue((int) (Math.random() * 10)); System.out.println("TestBean["+i+"] = " + tbs[i].getValue()); } BeanComparator bc = new BeanComparator("value"); System.out.println(""); System.out.println("Value to match: " + tbs[0].getValue()); for (int i = 1; i < tbs.length; i++) { if(bc.compare(tbs[i], tbs[0]) == 0) { System.out.println("Match found in bean "+ i); } } } }

Después de algunas pruebas, un resultado es exitoso. Este es el resultado:

TestBean[0] = 0 TestBean[1] = 4 TestBean[2] = 0 TestBean[3] = 2 TestBean[4] = 7 TestBean[5] = 3 TestBean[6] = 0 TestBean[7] = 3 TestBean[8] = 7 TestBean[9] = 3 Value to match: 0 Match found in bean 2 Match found in bean 6

Obviamente, aumentar el tamaño de la matriz TestBean aumentará las posibilidades de obtener coincidencias.

Debe importar a su proyecto los siguientes archivos jar: commons-logging- versión .jar, commons-beanutils- versión .jar, commons-beanutils-core- versión .jar, commons-beanutils-bean-collections- versión .jar, commons -collections- version .jar.

Los archivos se incluyen dentro de las API de colecciones commons-logging , commons-beanutils y commons-collections .


BeanComparator se puede usar para ordenar colecciones .
Es una implementación de Comparator que compara los beans en función de un valor de propiedad compartido.

BeanComparators son comparadores genéricos que pueden actuar sobre cualquier Java Bean. Con un buen sistema subyacente de reflexión de frijol, pueden manejar un frijol con propiedades de frijoles, matrices, colecciones y mapas.

Si tenemos una lista java.util.List de Java Beans de tipo Person , donde Person tiene una edad que es un Integer , un nombre que es una Cadena y un país que es un Bean de País (que a su vez tiene un Nombre de Cadena) - puede ordenarlo de todos modos que queramos con un BeanComparator .

Algunos ejemplos :

List people = ...; // list of Person objects //sort by age BeanComparator comp = new BeanComparator("age"); Collections.sort(list, comp); //sort by name BeanComparator comp = new BeanComparator("name"); Collections.sort(list, comp); //sort by country name BeanComparator comp = new BeanComparator("country.name"); Collections.sort(list, comp);

No es necesario escribir un PersonComparator con muchas opciones de propiedades para ordenar. En cambio, una sola clase de BeanComparator se ocupa de todo.

Encontrará un ejemplo completo aquí , con el siguiente escenario:

Si estaba implementando un comparador para comparar propiedades dinámicamente (por ejemplo, piense en ordenar filas en una tabla en una página web según la columna que seleccione el cliente), podría posponer la construcción de su comparador hasta que sepa a qué propiedad se ha seleccionado. clasificación.

Aquí es donde BeanComparator realmente brilla. Las cantidades masivas de código que normalmente escribiría para implementar este comportamiento se reducen a unas pocas líneas cuando usa BeanComparator .