[JAVA] Ordenar JsonArray

willy_chaos

Hola a todos, estoy haciendo una practica de Java.

Recibo mediante un webservice unos datos de cuentas bancarias, donde me envian el numero de cuenta, el propietario de la cuenta, el dinero que tiene y otros tantos datos mas.

Yo tengo creado un objeto llamado Account que uno de sus metodos es que reciba este listado de cuentas y las muestre, pero ahora quiero hacer que se ordenen de mayor a menor y dejar al usuario elegir cuantas quiere ver.

Pero me encuentro que no se como ordenar ese array de Json, puesto que con Array.sort(dinero) solo ordenaria el campo del dinero pero no moveria los datos asociados a ese dinero.

He estado buscando pero lo que encuentro no me convence, alguna idea de como hacerlo de forma sencilla.

CrIpI

#1 A mano ?

1 respuesta
willy_chaos

#2 Hombre si puede ser tirando de una clase ya creada, pues mejor, pero si no pues tocara a mano.

Lecherito

A qué te refieres con: puesto que con Array.sort(dinero) solo ordenaria el campo del dinero pero no moveria los datos asociados a ese dinero.

willy_chaos

Segun tengo entendido (mas que nada porque a mi no me ha funcioando siquiera).

  • No se si le puedo pasar un objeto como tal y por ejemplo Array.sort(listadocuentas.dinero) ? Dinero es uno de los campos que me devuelve el webservice mediante Json.

  • En caso de poderse hacer, si por ejemplo yo tengo

cuenta1 Amancio_Ortega 100000€
cuenta2 Bill_Gates 20000000€

Cuando yo le haga un array.sort quiero que me lo devuelva

cuenta2 Bill_Gates 20000000€
cuenta1 Amancio_Ortega 100000€

Pero segun he entendido, lo que hara sera

cuenta1 Amancio_Ortega 2000000€
cuenta2 Bill_Gates 100000€

1 respuesta
B

Ni me he rallado en entender la pregunta, pero qué problema hay si mandas un comparator al

sort

?

Lecherito

#5 Según has entendido? Osea que no lo has probado?

Como te dice 6, has de hacer un

Arrays.sort(cuentas, new Comparator<Cuenta>() {
    int compareTo(Cuenta c1, Cuenta c2) {
        return c1.dinero - c2.dinero;
    }
}

O algo de este estilo y te ordena las cuentas comparando el dinero, no te ordena el dinero

willy_chaos

He hecho este codigo (abajo) y me peta diciendo lo siguiente.

## JCashMachine - VIEW ACCOUNTS ##

1. All
2. Top 10

-> Select an option: 
Tamaño Acclist: 126
Tamaño Array: 126

Exception in thread "main" java.lang.NullPointerException
	at Account.getAccounts(Account.java:319)
	at Main.main(Main.java:52)

Decir que la linea 319 de la que se queja, es la equivalente a la 7 que teneis en el codigo siguiente.

spoiler
2 respuestas
Lecherito

#8 Yo que tu miraría con el debugger del IDE que estés usando, de todas maneras acostúmbrate a poner un ejemplo SSCEE (http://sscce.org/). Ya que nosotros lo podemos probar todo guay

pdj

#8 Te peta porque no esta inicializado... Prueba lo siguiente:

...
Account top10[] = new Account[acclist.size()];
System.out.println("Tamaño Acclist: "+acclist.size()+"\nTamaño Array: "+top10.length);
// CREAMOS UN CONTADOR PARA LAS POSICIONES DEL ARRAY
int i=0;        
// RELLENAMOS EL ARRAY for (JsonElement element: acclist) { top10[i] = new Account(); //Te falta esto!!!! top10[i].setHolder(element.getAsJsonObject().get("name").getAsString()); top10[i].setBalance(element.getAsJsonObject().get("balance").getAsFloat()); top10[i].setAccount(element.getAsJsonObject().get("account").getAsString()); i++; } ....
1 respuesta
smintcs

Igual me estoy meando muy fuera del tiesto pero esto en clase lo hacia con la interfaz Comparable.

La clase Acciones implementa Comparable, el metodo CompareTo es el que te haces tu y ahi le pones que te lo compare segun lo que tu quieras dentro de tu clase.

Luego lo ordenas con sort sin mas. Lo que pasa es que si en tantas respuestas no lo han puesto sera que algo se me escapa.

willy_chaos

#10 dios... vaya ida de olla...

thx a todos al final era una cosa que me faltaba en el Collections.sort

Usuarios habituales