Classificação com base na espécie de outra matriz

Tusriyer:

Eu tenho uma lista matriz String totalVals. Cada entrada totalValsé uma string namee 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 locsdados para estar em ordem descendente, o que eu posso fazer usando Arrays.sort(locs, Collections.reverseOrder());. Mas eu não sei como classificar namesde 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 iem ambas as matrizes permanecem os mesmos?

Piscina morta :

Em vez de quebrar o ArrayList em duas matrizes diferentes e classificando-os separadamente, classificar o ArrayListcom 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]

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=196878&siteId=1
Recomendado
Clasificación