Java 如何使用各自的数组ID或值对数组进行排序?

Java 如何使用各自的数组ID或值对数组进行排序?,java,sorting,comparator,Java,Sorting,Comparator,我有两个阵列: 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(","); 现在我想按降序排序点,

我有两个阵列:

 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(",");
现在我想按降序排序
,就像这样

500,400,300,200,100 with respective ids b,d,e,c,a
我该怎么做呢

但我试着按降序排序,这是可以的,但是如何用各自的id对id进行排序

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

如果我做的和ids一样,它也在下降。但这不是输出

编辑:

[500, 400, 300, 200, 100]
[japan, brazil, spain, finland, nepal]
[500, 400, 300, 200, 100]
[japan, brazil, spain, finland, nepal]
如果我有替换

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";
Arrays.sort()
将只对给定的一个数组进行排序。我将创建一个同时具有
id
point
字段的类,该类的数组(或集合),并对该数组进行排序。您还必须实现
comparable


或者,可以在两个数组之间建立映射。对
数组进行排序,然后对
ID
数组重新排序以匹配映射。(这稍微贵一点,但可能更容易理解。)

定义一个自定义类(或像Pair这样的泛型类,并定义一个按第一个值排序的比较器。然后您可以执行Arrays.sort(arrayOfPairs,pairComparator)

您可以定义自己的
比较器,类似这样:

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)]);
    }
}
输出:

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

编辑:

[500, 400, 300, 200, 100]
[japan, brazil, spain, finland, nepal]
[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)]);
    }
}

不管是谁投的票;既然你显然明白这是什么问题,你能解释一下吗?@BrianRoach他想对一个数组进行排序,然后在完成后按相同的顺序排列另一个相同大小的数组。@B战神-谢谢……我在破译它时遇到了问题。@Kshetri看我的答案:)就我个人而言,如果你喜欢OOP,那么前者更容易理解。谢谢你,它也很有用。很好,嗯……如果我把ids阵列替换到美国、印度、日本、芬兰、德国,那该怎么办??如果我说的对,请将createCharacterArray()替换为createStringArray()。但您在自定义类上放置了一个参数。这是点,但在创建新实例后,您将指定两个参数。怎么可能呢?@kshetrihorror因为我编辑了答案,所以请看最后的答案update@KshetriHorrorgoogle请参阅一般实现的最终更新。谢谢,它也很有用。