Eu tenho uma lista matriz String totalVals
. Cada entrada totalVals
é uma string name
e um duplo loc
, que se une em uma única cadeia antes de ser inserido na lista de matriz como:
totalVals.add(name + "," + loc);
É assim que eu sou dado os dados. I ter separado os valores em uma matriz de cadeia dupla e como se segue:
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]);
}
Agora, no entanto, gostaria de classificar os dados e colocá-lo de volta para a lista de matriz antes de retornar. Eu quero os locs
dados para estar em ordem descendente, o que eu posso fazer usando Arrays.sort(locs, Collections.reverseOrder());
. Mas eu não sei como classificar names
de modo que os nomes ainda estão associados com os mesmos locais que eram originalmente.
Exemplo de totalVals: {"Bahamas,32.2233","Zimbabwe,82.2443","India,56.2355","Australia,24.4363"}
Seria dividido em:
names = {"Bahamas","Zimbabwe","India","Australia"};
locs = {32.2233,82.2443,56.2355,24.4363};
Qual seria, então, classificadas para:
names = {"Zimbabwe","India","Bahamas","Australia"};
locs = {82.2443,56.2355,32.2233,24.4363};
Então, como é que eu, em seguida, classificar as duas matrizes de tal forma que as associações no índice i
em ambas as matrizes permanecem os mesmos?
Em vez de quebrar o ArrayList em duas matrizes diferentes e classificando-os separadamente, classificar o ArrayList
com base no valor duplo em ordem decrescente e, em seguida, quebrar matrizes em duas matrizes
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 quebrar em duplo matriz [] e String [] matriz
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 java 8 versões
Usando `Collections.sort () com comparador personalizado, e depois dividir o lista em duas matrizes 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]