Tengo una lista de arreglos de cuerda totalVals
. Cada entrada totalVals
es una cadena name
y un doble loc
, que está unido en una sola cadena antes de que se inserta en la lista de arreglos como:
totalVals.add(name + "," + loc);
Esta es la forma en que me dan los datos. He separado los valores en una matriz de cadenas y doble como sigue:
String[] temp;
String[] names = new String[totalVals.size()];
double[] locs = new double[totalVals.size()];
for (int i = 0; i < totalVals.size(); I++){
temp = totalVals.get(i).splot(",");
names[i] = temp[0];
locs[i] = Double.parseDouble(temp[1]);
}
Ahora, sin embargo, quiero ordenar los datos y ponerlo de nuevo en la lista de arreglo antes de regresar. Quiero que los locs
datos estén en orden descendente, lo que puedo hacer utilizando Arrays.sort(locs, Collections.reverseOrder());
. Pero no sé cómo ordenar names
de manera que los nombres todavía están asociados a los mismos lugares que eran originalmente.
Ejemplo de totalVals: {"Bahamas,32.2233","Zimbabwe,82.2443","India,56.2355","Australia,24.4363"}
Se dividiría en:
names = {"Bahamas","Zimbabwe","India","Australia"};
locs = {32.2233,82.2443,56.2355,24.4363};
Que luego serían ordenados a:
names = {"Zimbabwe","India","Bahamas","Australia"};
locs = {82.2443,56.2355,32.2233,24.4363};
Entonces, ¿cómo iba yo a continuación, ordenar las dos matrices de tal manera que las asociaciones en el índice i
en ambas matrices siguen siendo los mismos?
En lugar de romper el ArrayList en dos matrices diferentes y clasificación por separado, el tipo ArrayList
basado en un valor doble en orden descendente y luego romper ArrayList en dos matrices
List<String> list = new ArrayList<>();
list.add("Bahamas,32.2233");
list.add("Zimbabwe,82.2443");
list.add("India,56.2355");
list.add("Australia,24.4363");
List<String> result = list.stream().sorted((a,b)->b.substring(b.lastIndexOf(",")+1).compareTo(a.substring(a.lastIndexOf(",")+1))).collect(Collectors.toList());
System.out.println(result); //[Zimbabwe,82.2443, India,56.2355, Bahamas,32.2233, Australia,24.4363]
lista Rompiendo en una matriz doble [] y String [] array
double[] arr = result.stream().mapToDouble(i->Double.parseDouble(i.substring(i.lastIndexOf(",")+1))).toArray();
System.out.println(Arrays.toString(arr)); // [82.2443, 56.2355, 32.2233, 24.4363]
String[] countries = result.stream().map(i->i.substring(0, i.lastIndexOf(","))).toArray(String[]::new);
System.out.println(Arrays.toString(countries)); //[Zimbabwe, India, Bahamas, Australia]
Antes de java 8 versiones
Mediante el uso de `Collections.sort () con el comparador de encargo, y luego dividir la lista en dos matrices diferentes
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.substring(o2.lastIndexOf(",")+1).compareTo(o1.substring(o1.lastIndexOf(",")+1));
}
});
System.out.println(list); //[Zimbabwe,82.2443, India,56.2355, Bahamas,32.2233, Australia,24.4363]