Posts etiquetados ‘Vector’

Soy Ingeniero Electrónico pero actualmente trabajo en Informática. En este blog suelo comentar cualquier tontería que se me venga a la cabeza o vea por ahí, pero nunca he hecho una entrada de tipo técnico. Se me presentó un caso poco común en el trabajo y dado que me parece bastante útil la solución, lo comparto aquí.

En el proyecto donde estoy ahora, manejamos aplicaciones web que recuperan divera información de las bases de datos de la empresa. Al recuperarlas, por la arquitectura y lógica con la que se diseñaron las aplicaciones, se almacena cada registro en una Hashtable usando como clave el nombre del campo, y luego las junta todas en un Vector para que sea más sencillo trabajar con dichos datos. En este caso teníamos un Vector con datos como estos:

[{ COD_USUARIO="A100001", PUNT_1=9.45, PERCENT_1=0, PUNT_2=7.45, PERCENT_2=0},
 { COD_USUARIO="A100002", PUNT_1=7.89, PERCENT_1=0, PUNT_2=3,75, PERCENT_2=0},
 { COD_USUARIO="A100003", PUNT_1=3.67, PERCENT_1=0, PUNT_2=7.36, PERCENT_2=0},
 { COD_USUARIO="A100004", PUNT_1=5.54, PERCENT_1=0, PUNT_2=8.35, PERCENT_2=0},
 { COD_USUARIO="A100005", PUNT_1=6.28, PERCENT_1=0, PUNT_2=9.58, PERCENT_2=0}]

Con esta información, debíamos realizar algunos cálculos que requerían que los datos estuvieran ordenados ascendentemente en un caso, usando como referencia la columna PUNT_1, y en otro la columna PUNT_2.

Lo más sencillo es usar un ORDER BY a la hora de recuperar los datos y almacenar los resultados en dos Vectores distintos, pero las queries tardaban mucho en ejecutarse y lo mejor era acceder a la base de datos lo menos posible. Había que recuperar los datos una sóla vez y luego ordenar el Vector de acuerdo al criterio que se pidiera.

Googleando un poco, encontramos varios ejemplos que explicaban como ordenar un Vector haciendo uso del método sort de la clase Collections, pero siempre hablaban de vectores que contenían una sola columna de datos. Por ejemplo, algo así:

 [{"Uno"},
 {"Dos"},
 {"Tres"} ,
 {"Cuatro"} ]

Esto no nos servía de mucho ya que nuestro Vector cuenta con varias columnas. Entonces, encontramos un ejemplo en Developer Papercuts, que nos iluminó bastante. Haciendo uso de la interfaz Comparable, podíamos especificar el criterio de comparación entre dos elementos cualquiera, inclusive – como ya imaginarán – Hashtables.

(más…)

Anuncios