Как отсортировать массив с соответствующими идентификаторами или значениями массива? - PullRequest
2 голосов
/ 08 января 2012

У меня есть два массива:

 String [] ids= new String [5];
 String [] points= new String [5];

 String one="a,b,c,d,e";
 //or
 String one="nepal,japan,finland ,brazil,spain";
 String two="100,500,200,400,300";
 ids= one.split(",");
 points= two.split(",");

Теперь я хочу отсортировать points в порядке убывания, как.

500,400,300,200,100 with respective ids b,d,e,c,a

как я могу это сделать.

Но я пробую эту точку в порядке убывания, что нормально, но как упорядочить идентификаторы с соответствующим идентификатором.

 Arrays.sort(points, Collections.reverseOrder());
 Arrays.toString(points);

или

Arrays.sort(points);

если я сделаю то же самое, что и id, который тоже по убыванию. но который не выводится.

Отредактировано:

если у меня есть замена

a, b, c, d, e буква к имени или времени страны.

String one="a,b,c,d,e";
//  or
String countries = "nepal,japan,finland,brazil,spain";
// or
String time="0:10,1:25,4:00,2:10,0:55";

Ответы [ 3 ]

2 голосов
/ 08 января 2012

Вы можете определить свой собственный Comparator, что-то вроде этого:

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

public class CustomArrayComparator implements Comparator<String>
{
    private String[] pointsArray;
    private Map<String, Integer> idsMap;

    public CustomArrayComparator(String[] pointsArray, String[] countriesArray)
    {
        this.pointsArray = pointsArray;
        idsMap = new HashMap<String, Integer>();
        for(int i = 0; i < pointsArray.length; i++) idsMap.put(countriesArray[i], i);
    }

    @Override
    public int compare(String s1, String s2)
    {   
        return pointsArray[idsMap.get(s2)].compareTo(pointsArray[idsMap.get(s1)]);
    }
}

и вот главное:

String[] points = {"100", "500", "200", "400", "300"};
String[] countries = {"nepal", "japan", "finland", "brazil", "spain"};
CustomArrayComparator comparator = new CustomArrayComparator(points, countries);
Arrays.sort(countries, comparator);
Arrays.sort(points, Collections.reverseOrder());

System.out.println(Arrays.toString(points));
System.out.println(Arrays.toString(countries));

ВЫХОД:

[500, 400, 300, 200, 100]
[japan, brazil, spain, finland, nepal]

РЕДАКТИРОВАТЬ:

Как общий класс, здесь тот же класс с универсальной реализацией:

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

public class CustomArrayComparator<T extends Comparable<T>, E> implements Comparator<T>
{
    private T[] mainArray;
    private Map<E, Integer> indexesMap;

    public CustomArrayComparator(T[] mainArray, E[] associatedArray)
    {
        this.mainArray = mainArray;
        indexesMap = new HashMap<E, Integer>();
        for(int i = 0; i < mainArray.length; i++)
        {
            indexesMap.put(associatedArray[i], i);
        }
    }

    @Override
    public int compare(T t1, T t2)
    {   
        return mainArray[indexesMap.get(t2)].compareTo(mainArray[indexesMap.get(t1)]);
    }
}

Основное:

String[] points = {"100", "500", "200", "400", "300"};
String[] countries = {"nepal", "japan", "finland", "brazil", "spain"};
Comparator<String> comparator = new CustomArrayComparator<String, String>(points, countries);
Arrays.sort(countries, comparator);
Arrays.sort(points, Collections.reverseOrder());

System.out.println(Arrays.toString(points));
System.out.println(Arrays.toString(countries));

ВЫХОД:

[500, 400, 300, 200, 100]
[japan, brazil, spain, finland, nepal]
2 голосов
/ 08 января 2012

Arrays.sort() будет сортировать только один массив, который вы ему дадите. Я бы создал класс с полями id и point, массив (или коллекцию) этого класса и отсортировал бы этот массив. Вам также придется реализовать comparable.

Кроме того, вы можете иметь отображение между двумя массивами. Сортируйте массив points, затем измените порядок массива ids в соответствии с отображением. (Это немного дороже, но, возможно, легче понять.)

1 голос
/ 08 января 2012

Определите себе пользовательский класс (или что-то общее, например, Pair и определите компаратор, который сортирует по первому значению. Затем вы можете сделать Arrays.sort (arrayOfPairs, pairComparator)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...