Вы можете определить свой собственный 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]